!!!High Density Interface (PC FLoppy Interface with Speedy like OS)

General Information

Author: Erhard Pütz \\
Assembler: Bibo Assembler \\
Published: 1991 \\
Download: [http://www.atari-central.de/floppyservice/floppy/gb/index.htm]

[{TableOfContents }]


!! HDI Source Code
[{Image src='hdi.jpg' width='..' height='..' align='left|center|right' style='..' class='..' }]


!!  High-Density  Disk  Interface 

The interface for connecting up to 4 standard drives to the XL/XE. Here you can mix 3,5" and 5,25" floppies at will. Required is that the drive supports the Disk Change signal at pin 34 of the Shugart bus. It doesn't support Medium Density (128 bytes/sector in MFM mode and 1.2 MB drives). Maximum transfer rate: 500 Kbit/s (1.44 MByte disks). The HDI is sold out.

The HDI is designed, build and all Source written by Erhard Pütz, (aka ABBUC Floppy Doc, Atreju)

!! HDI OS ROM in Bibo Assembler Format
! OSV24EQU.BIN
{{{
00010 ******************************
00020 *				 *
00030 *	Betriebssystem für das	*
00040 *	 3.5" Interface		 *
00050 *	  für den Atari XL/XE	 *
00060 *				 *
00070 *	Hersteller: Erhard Pütz  *
00080 *	OS-Code	: Erhard P}tz  *
00090 *				 *
00100 *	(c) 1989, 1990, 1991	  *
00110 *				 *
00120 *	Version	: 2.0		 *
00130 *				 *
00140 *	UltraSpeed	 : Ja	 *
00150 *	HD-Modus	: Ja	 *
00160 *	Sektoranordnung  : Calc. *
00170 *	Bootsektorpuffer : Nein  *
00180 *	Trackpuffer read : Nein  *
00190 *	Trackpuffer write: Nein  *
00200 *	ROM-Boot: Nein  *
00210 *				 *
00220 ******************************
00230			 .LI OF
00240			 .NO
00250 ******************************
00260 *				 *
00270 *	Definition von Macros	 *
00280 *	von 65C02 - Befehlen,	 *
00290 *	die dieser bloede	  *
00300 *	Assembler nicht kann.	 *
00310 *				 *
00320 ******************************
00330 ;
00340 RBO		=	$07 ;Clear Bit on
00350 RB1		=	$17 ;Page 0 Adr.
00360 RB2		=	$27
00370 RB3		=	$37
00380 RB4		=	$47
00390 RB5		=	$57
00400 RB6		=	$67
00410 RB7		=	$77
00420 ;
00430 SB0		=	$87 ;Set Bit on
00440 SB1		=	$97 ;Page 0 Adr.
00450 SB2		=	$A7
00460 SB3		=	$B7
00470 SB4		=	$C7
00480 SB5		=	$D7
00490 SB6		=	$E7
00500 SB7		=	$F7
00510 ;
00520 BR0		=	$0F ;Branch on
00530 BR1		=	$1F ;Bit reset
00540 BR2		=	$2F
00550 BR3		=	$3F
00560 BR4		=	$4F
00570 BR5		=	$5F
00580 BR6		=	$6F
00590 BR7		=	$7F
00600 ;
00610 BS0		=	$8F ;Branch on
00620 BS1		=	$9F ;Bit set
00630 BS2		=	$AF
00640 BS3		=	$BF
00650 BS4		=	$CF
00660 BS5		=	$DF
00670 BS6		=	$EF
00680 BS7		=	$FF
00690 ------------------------------
00700 ;RIOT Ports (Ram: $4000-$407F)
00710 ------------------------------
00720 RRAM	  = $4000
00730 PORTA	 = $4080  Bit
00740						; 0  o TxC
00750						; 1  o TC
00760						; 2  i /IDX
00770						; 3  o HDL
00780						; 4	 nc
00790						; 5	 nc
00800						; 6  o PCVal
00810						; 7  i /DC
00820 PACTL	 = $4081
00830 PORTB	 = $4082
00840						; 0  o RST SIO
00850						; 1  o RST FDC
00860						; 2  o DRV FDC
00870						; 3  i IRQ FDC
00880						; 4  o A14 Rom
00890						; 5  o A15 Rom
00900						; 6  i /RDY
00910						; 7  i D#
00920 PBCTL	 = $4083
00930 ------------------------------
00940 ;RIOT Timer
00950 ------------------------------
00960 RTIMID	= $4084 ;%1000 0100 R
00970 RTIMIE	= $408C ;%1000 1100 R
00980 IFLG	  = $4085 ;%1000 0101 R
00990 T0001D	= $4094 ;%1001 0100 W
01000 T0008D	= $4095 ;%1001 0101 W
01010 T0064D	= $4096 ;%1001 0110 W
01020 T1024D	= $4097 ;%1001 0111 W
01030 T0001E	= $409C ;%1001 1100 W
01040 T0008E	= $409D ;%1001 1101 W
01050 T0064E	= $409E ;%1001 1110 W
01060 T1024E	= $409F ;%1001 1111 W
01070 ------------------------------
01080 ;SIO Adressen
01090 ------------------------------
01100 SIODAT	= $4100
01110 SIOCMD	= $4101
01120 SIOST	 = $4101
01130 ------------------------------
01140 ;Floppy Controller Adressen
01150 ------------------------------
01160 FDCST	 = $4200 ;FDC Status R
01170 FDCDAT	= $4201 ;FDC Data R/W
01180 OR		 = $4300
01190 CR		 = $4400
01200 ------------------------------
01210 ACK		= 'A
01220 NACK	  = 'N
01230 COMPLT	= 'C
01240 ERROR	 = 'E
01250 ------------------------------
01260 ;Seite 0
01270 ------------------------------
01280			 .OR $0000
01290 BUFADR	.HX 0000
01300 BUFLEN	.HX 0000
01310 BUFEND	.HX 0000
01320 DIV		.HX 0000
01330 DOR		.HX 0000
01340 ZSP		.HX 0000
01350 D0PB	  .DA $2A00
01360 D1PB	  .DA $2B80
01370 D2PB	  .DA $2D00
01380 D3PB	  .DA $2E80
01390 D0PT	  .HX 0000
01400 D1PT	  .HX 0000
01410 D2PT	  .HX 0000
01420 D3PT	  .HX 0000
01430 ------------------------------
01440 ;Variablen f}r SIO
01450 ------------------------------
01460 PSUMME	.HX 00
01470 DRIVE	 .HX 00
01480 COMAND	.HX 00
01490 DAUX1	 .HX 00
01500 DAUX2	 .HX 00
01510			 .HX 00	 empf.PSUMME
01520 STATUS	.HX 00
01530 BAUD	  .HX 00	 Zaehler f}r
01540						 ;Sendetakt
01550 ------------------------------
01560 ;Variablen f}r FDC
01570 ------------------------------
01580 OFFDEL	.HX 00	 MotTimeout
01590 MOTIM	 .HX 000000
01600 ACTDRV	.HX 00
01610 CYL		.HX 00
01620 HEA		.HX 00
01630 REC		.HX 00		  ;$04
01640 NUM		.HX 00
01650 EOT		.HX 12
01660 GPL		.HX 01
01670 DTL		.HX 00		  ;$08
01680 STM		.HX 00
01690			 .HX 000000	 ;$0C
01700 IDTAB	 .HX 00		  ;CYL
01710			 .HX 00		  ;HEA
01720			 .HX 00		  ;REC
01730 FOTAB	 .HX 00		  ;NUM
01740			 .HX 00		  ;EOT
01750			 .HX 00		  ;GPL
01760			 .HX 00		  ;DTL
01770 CHKROMZ  .HX 0000
01780 RTIMIDZ  .HX 00
01790 ------------------------------
01800 ;Prozessorstapel (STACK)
01810 ------------------------------
01820			 .OR $0100
01830 STACK	 .BL $0100,$00
01840 ------------------------------
01850 ;Tabellen
01860 ------------------------------
01870			 .OR $0200
01880 DRVTAB	.HX FFFFFFFF
01890 ST0TAB	.HX FFFFFFFF
01900 ST1TAB	.HX FFFFFFFF
01910 ST2TAB	.HX FFFFFFFF
01920 ST3TAB	.HX FFFFFFFF
01930 PCNTAB	.HX FFFFFFFF
01940 ------------------------------
01950 PTRACK	.HX 50505050 # Tracks
01960 PSTEPR	.HX 02020202 Steprate
01970 PSEKHI	.HX 00000000 # Sektors
01980 PSEKLO	.HX 12121212 per Track
01990 PSIDE	 .HX 00000000 (00/01)
02000 PMF		.HX 00000000 (00/04)
02010 PBYTHI	.HX 00000000 00/1/2/3
02020 PBYTLO	.HX 80808080 80/0/0/0
02030 PONLIN	.HX FFFFFFFF
02040			 .HX 00000000 unused
02050			 .HX 00000000 unused
02060			 .HX 00000000 unused
02070 PBAUD	 .HX 0A0A0A0A ser.Clock
02080 PHD		.HX FFFFFFFF 2ND/0HD
02090 PMT		.HX 00000000 MT=$80
02100 PMAXLO	.HX 00000000 # Sektors
02110 PMAXHI	.HX 00000000 per Disk
02120 ------------------------------
02130 ST02EA	.HX 00000000 ;->$02EA
02140 ST02EB	.HX 00000000 ;->$02EB
02150 ST02EC	.HX 00000000 ;->$02EC
02160 ST02ED	.HX 00000000 ;->$02ED
02170 ------------------------------
02180 HPYFLG	.HX 00000000
02190 RDFLAG	.HX 00000000
02200 ------------------------------
02210 SKEW	  .BL $24,$00
02220 SKWSEC	.HX 00
02230 SKEWPT	.HX 00
02240 INTRLV	.HX 00
02250 ------------------------------
02260			 .OR $0300
02270 SKWADR	.BL $90,$00
02280 ------------------------------
02290 ;Puffer
02300 ------------------------------
02310			 .OR $0400
02320 BOOTBF	.BL $0200,$00
02330 ------------------------------
02340 SIOBUF	.BL $0100,$00
02350 SECBUF	.BL $0100,$00
02360 ------------------------------
}}}
! OS.V28
{{{
00010			 .IN "D:OSV24EQU.BIB
00020			 .OR $C000
00030			 .OF "D:TEAC.ROM
00040 *
00050 CHKROM	.HX FFFF
00060			 .AS "EP HDI Version 2.8"
00070 *
00080 ROMTST	LDA #$02
00090			 STA BUFADR
00100			 LDA #$C0
00110			 STA BUFADR+1
00120			 LDA #$FF
00130			 STA BUFEND
00140			 STA BUFEND+1
00150			 STZ CHKROMZ
00160			 STZ CHKROMZ+1
00170 .01		LDA (BUFADR)
00180			 CLC
00190			 ADC CHKROMZ
00200			 STA CHKROMZ
00210			 BCC .02
00220			 INC CHKROMZ+1
00230 .02		JSR BUFINC
00240			 BCC .01
00250			 LDA CHKROM
00260			 AND CHKROM+1
00270			 CMP #$FF
00280			 BEQ .99
00290			 LDA CHKROMZ
00300			 CMP CHKROM
00310 .03		BNE .03
00320			 LDA CHKROMZ+1
00330			 CMP CHKROM+1
00340 .04		BNE .04
00350 .99		RTS
00360 ------------------------------
00370 SETX	  SEC
00380			 LDA BUFEND+1
00390			 SBC BUFADR+1
00400			 TAX
00410			 RTS
00420 ------------------------------
00430 RAMSET	LDY #$00
00440			 JSR SETX
00450 .01		LDA BUFADR+1
00460 .02		STA (BUFADR),Y
00470			 INY
00480			 BNE .02
00490			 INC BUFADR+1
00500			 DEX
00510			 BNE .01
00520			 RTS
00530 *
00540 RAMCHK	LDY #$00
00550			 JSR SETX
00560 .01		LDA BUFADR+1
00570			 EOR (BUFADR),Y
00580 .02		BNE .02
00590			 STA (BUFADR),Y
00600			 INY
00610			 BNE .01
00620			 INC BUFADR+1
00630			 DEX
00640			 BNE .01
00650			 RTS
00660 *
00670 RAMTST	STZ BUFADR
00680			 LDA #$02
00690			 STA BUFADR+1
00700			 LDA #$40
00710			 STA BUFEND+1
00720			 JSR RAMSET
00730			 LDA #$80
00740			 STA BUFADR+1
00750			 LDA #$C0
00760			 STA BUFEND+1
00770			 JSR RAMSET
00780			 LDA #$02
00790			 STA BUFADR+1
00800			 LDA #$40
00810			 STA BUFEND+1
00820			 JSR RAMCHK
00830			 LDA #$80
00840			 STA BUFADR+1
00850			 LDA #$C0
00860			 STA BUFEND+1
00870			 JMP RAMCHK
00880 ------------------------------
00890 MOVTAB	LDX #$5F
00900 .01		LDA CMDTAB,X
00910			 STA RRAM,X
00920			 DEX
00930			 BPL .01
00940			 RTS
00950 ------------------------------
00960 CALC	  SEC
00970			 LDA DAUX1
00980			 SBC #$01
00990			 STA DIV
01000			 LDA DAUX2
01010			 SBC #$00
01020			 STA DIV+1
01030			 LDA PSEKLO,Y  ;# SecLO
01040			 STA DOR
01050			 LDX #$00
01060			 STX ZSP
01070			 STX ZSP+1
01080			 STX DOR+1
01090 SHIFT	 BIT DOR+1
01100			 BMI SCHLEIF
01110			 ASL DOR
01120			 ROL DOR+1
01130			 INX
01140			 BNE SHIFT
01150 SCHLEIF  SEC
01160			 LDA DIV
01170			 SBC DOR
01180			 STA ZSP
01190			 LDA DIV+1
01200			 SBC DOR+1
01210			 STA ZSP+1
01220			 PHP
01230			 ROL CYL
01240			 PLP
01250			 BCC NEG
01260			 LDA ZSP
01270			 STA DIV
01280			 LDA ZSP+1
01290			 STA DIV+1
01300 NEG		LSR DOR+1
01310			 ROR DOR
01320			 DEX
01330			 BPL SCHLEIF
01340			 LDX DIV
01350			 INX
01360			 STX REC
01370			 LDX #$00		;HEA
01380			 LDA PMT,Y	;MT ?
01390			 BPL .01		 ;Nein ->
01400			 LDA CYL
01410			 LSR
01420			 STA CYL
01430			 BCC .01
01440			 INX			  ;HEA=1
01450 .01		LDA CYL
01460			 CMP PTRACK,Y
01470			 BCC NSIDE1
01480			 SBC PTRACK,Y
01490			 STA CYL
01500			 INX			  ;HEA=1
01510 NSIDE1	STX HEA
01520			 RTS
01530 ------------------------------
01540 LENTAB	.HX 00010204081020
01550 ;
01560 SECBFL	LDA PBYTLO,Y
01570			 STA BUFLEN
01580			 LDA PBYTHI,Y
01590			 TAX
01600			 LDA LENTAB,X
01610			 STA BUFLEN+1
01620 ;
01630 SSECBF	LDA /SECBUF
01640			 STA BUFADR+1
01650			 LDA #SECBUF
01660			 STA BUFADR
01670 SBFEND	CLC
01680			 LDA BUFADR
01690			 ADC BUFLEN
01700			 STA BUFEND
01710			 LDA BUFADR+1
01720			 ADC BUFLEN+1
01730			 STA BUFEND+1
01740			 RTS
01750 ------------------------------
01760 SSIOBF	LDA /SIOBUF
01770			 STA BUFADR+1
01780			 LDA #SIOBUF
01790			 STA BUFADR
01800			 JMP SBFEND
01810 ------------------------------
01820 BUFINC	INC BUFADR	 C=1 if
01830			 BNE .01		 end of
01840			 INC BUFADR+1  Buffer
01850 .01		LDA BUFADR+1
01860			 CMP BUFEND+1
01870			 BCC .02
01880			 LDA BUFADR
01890			 CMP BUFEND
01900 .02		RTS
01910 ------------------------------
01920 PBYTE	 BIT FDCST
01930			 BPL PBYTE
01940			 STA FDCDAT
01950			 RTS
01960 ------------------------------
01970 GBYTE	 BIT FDCST
01980			 BPL GBYTE
01990			 LDA FDCDAT
02000			 RTS
02010 ------------------------------
02020 RESULTS  PHA
02030			 LDA #$02	 ;Terminal
02040			 TSB PORTA	;Count Set
02050			 TRB PORTA	;Cleared
02060			 PHX
02070			 LDY ACTDRV	 Get 7
02080			 JSR GBYTE	  Result
02090			 STA ST0TAB,Y  Bytes
02100			 JSR GBYTE	  from FDC
02110			 STA ST1TAB,Y
02120			 JSR GBYTE
02130			 STA ST2TAB,Y
02140			 LDX #$00
02150 .01		JSR GBYTE
02160			 STA CYL,X
02170			 INX
02180			 CPX #$04
02190			 BNE .01
02200 *
02210			 LDA ST0TAB,Y  C=1 bei
02220			 ASL			  Error
02230			 ORA ST0TAB,Y
02240			 ASL
02250			 PLX
02260			 PLA
02270			 RTS
02280 ------------------------------
02290 SPEC	  PHX
02300			 LDX #$02	 ;verm. ND
02310			 LDA PSEKLO,Y ;Bei mehr
02320			 CMP #19	  ;als 18
02330			 BCC .01	  ;Sektoren
02340			 LDX #0		;=HD
02350 .01		TXA
02360			 STA CR
02370			 STA PHD,Y
02380			 LDA #$03		;CMD
02390			 JSR PBYTE
02400			 LDA PSTEPR,Y  ;Stepr.
02410			 AND #$0F
02420			 BEQ .02
02430			 DEA
02440 .02		EOR #$0F
02450			 ASL
02460			 ASL
02470			 ASL
02480			 ASL
02490			 BPL .03
02500			 CPX #$00		Bei HD
02510			 BNE .03		 SRT x 2
02520			 ASL
02530 .03		ORA #$0F		;SRT/HUT
02540			 JSR PBYTE
02550			 LDA #$1F		;HLT
02560			 ASL
02570			 CPX #$00
02580			 BNE .04
02590			 ASL
02600 .04		ORA #$01		No DMA
02610			 JSR PBYTE
02620			 PLX
02630			 RTS
02640 ------------------------------
02650 DSTAT	 PHA
02660			 LDA #$04		;CMD
02670			 JSR PBYTE
02680			 TYA			  ;D#
02690			 JSR PBYTE
02700 .01		BIT FDCST
02710			 BPL .01
02720			 LDA PORTA	  ;DChange
02730			 AND #$80
02740			 ORA FDCDAT
02750			 STA ST3TAB,Y
02760			 PLA
02770			 RTS
02780 ------------------------------
02790 ISTAT	 PHA
02800			 PHX
02810 .04		LDA FDCST	  ;FDC RQM
02820			 BPL .04
02830			 AND #$70
02840			 BNE .04
02850			 LDA FDCST
02860			 AND #$0F		;Busy ?
02870			 BEQ .03		 ;Nein ->
02880			 LDA #$08		;W IRQ
02890 .01		BIT PORTB
02900			 BEQ .01
02910 .03		LDA #$08		;CMD
02920			 JSR PBYTE
02930			 JSR GBYTE
02940			 CMP #$80
02950			 BEQ .02
02960			 PHA
02970			 AND #$03
02980			 TAX
02990			 PLA
03000			 STA ST0TAB,X
03010			 JSR GBYTE
03020			 STA PCNTAB,X
03030 .02		PLX
03040			 PLA
03050			 RTS
03060 ------------------------------
03070 TR00	  LDA #$07		;CMD
03080			 JSR PBYTE
03090			 TYA			  ;D#
03100			 JSR PBYTE
03110			 JSR ISTAT
03120			 JMP DSTAT
03130 ------------------------------
03140 STEPIN	LDA #$01
03150			 BNE SEEK1
03160 STEPOUT  LDA #$FF
03170 SEEK1	 CLC
03180			 ADC PCNTAB,Y
03190 SEEK	  CMP PTRACK,Y
03200			 BCS SEEKX
03210			 PHA
03220			 LDA #$0F		;CMD
03230			 JSR PBYTE
03240			 TYA
03250			 JSR PBYTE	  ;D#
03260			 PLA
03270			 JSR PBYTE	  ;NCN
03280			 JSR ISTAT
03290			 JSR DSTAT
03300			 CLC
03310 SEEKX	 RTS
03320 ------------------------------
03330 XMTCMD	PHA			  ;CMD
03340			 PHX
03350			 PHP
03360			 LDA PMF,Y
03370			 ASL
03380			 ASL
03390			 ASL
03400			 ASL
03410			 AND #$40
03420			 TSX
03430			 ORA $0103,X
03440			 JSR PBYTE
03450			 LDA HEA
03460			 ASL
03470			 ASL
03480			 ORA ACTDRV
03490			 JSR PBYTE
03500			 PLP
03510			 BCC .02
03520			 LDX #$00
03530 .01		LDA CYL,X
03540			 JSR PBYTE
03550			 INX
03560			 CPX #$07
03570			 BNE .01
03580 .02		PLX
03590			 PLA
03600			 RTS
03610 ------------------------------
03620 RESET	 CLD
03630			 LDX #$FF	 Ca. 130ms
03640			 TXS			Verz|ge-
03650			 LDY #$FF	 rung zum
03660 .01		DEY			Einschwin-
03670			 BNE .01	  gen der
03680			 DEX			Betriebs-
03690			 BNE .01	  spannung.
03700 *
03710			 STX PACTL	Eing{nge
03720			 STX PBCTL
03730 *
03740			 STX $00	  65C02 CPU?
03750			 .HX 8700	 SB0 $00
03760			 LDA $00
03770 .02		BEQ .02	  Nein ->
03780 *
03790 .03		TXA			Ramtest
03800			 STA $00,X	Seiten
03810			 EOR #$FF
03820			 STA $0100,X 0 und 1
03830			 INX
03840			 BNE .03
03850 .31		TXA
03860			 CMP $00,X
03870 .32		BNE .32
03880			 EOR #$FF
03890			 CMP $0100,X
03900 .33		BNE .33
03910			 INX
03920			 BNE .31
03930 *
03940			 LDA #$FD	 Motor an
03950			 STA PORTA	TC zur}ck-
03960			 LDA #$5B	 setzen
03970			 STA PACTL
03980 *
03990			 LDA #$FC	 /Reset f}r
04000			 STA PORTB	FDC und
04010			 LDA #$37	 SIO
04020			 STA PBCTL
04030 *
04040			 JSR ROMTST
04050			 JSR RAMTST
04060			 JSR MOVTAB
04070 *
04080			 LDA #$FF
04090			 STA T1024D  65ms Pause
04100 .13		BIT IFLG	 nach Reset
04110			 BPL .13
04120 *
04130			 LDA #$4D	 SIO:8/N/1
04140			 STA SIOCMD  asynchron
04150			 LDA #$37
04160			 STA SIOCMD
04170 *
04180			 LDA FDCST	FDC: Base
04190			 LDA #$08	 Warte auf
04200 .14		BIT PORTB	FDC IRQ
04210			 BEQ .14	  nach Reset
04220 *
04230			 LDX #$02	 ND
04240			 STX CR
04250 *
04260			 LDY #$03	 Ein Reset
04270 .15		JSR ISTAT	bedingt
04280			 DEY			den Nicht-
04290			 BPL .15	  RDY-Status
04300 *						  aller FDD
04310 *						  u. erzeugt
04320 *						  einen IRQ
04330 *
04340			 LDA #$03	 2ms SRT
04350			 JSR PBYTE
04360			 LDA #$EF
04370			 JSR PBYTE
04380			 JSR PBYTE
04390 *
04400			 LDY #$03	 Alle Lauf-
04410 .16		LDA #$07	 werke nach
04420			 JSR PBYTE	Track 0
04430			 TYA
04440			 JSR PBYTE
04450			 DEY
04460			 BPL .16
04470 *
04480 .17		JSR ISTAT	Es sind
04490			 LDA FDCST	noch nicht
04500			 AND #$0F	 alle
04510			 BNE .17	  fertig ->
04520 *
04530			 LDA #$31	 Vorhandene
04540			 PHA			Floppies
04550			 LDY #$00	 eintragen
04560 .18		STY ACTDRV  und konfi-
04570			 LDA #40	  gurieren
04580			 STA PTRACK,Y
04590			 LDA #$02
04600			 STA PSTEPR,Y
04610			 STA PHD,Y
04620			 LDA #$00
04630			 STA PSEKHI,Y
04640			 STA PSIDE,Y
04650			 STA PMF,Y
04660			 STA PBYTHI,Y
04670			 STA PMT,Y
04680			 STA DRVTAB,Y
04690			 STA HPYFLG,Y
04700			 LDA #$12
04710			 STA PSEKLO,Y
04720			 LDA #$80
04730			 STA PBYTLO,Y
04740			 LDA #$FF
04750			 STA PONLIN,Y
04760			 LDA #$0A
04770			 STA PBAUD,Y
04780			 LDA #$D0	 Max # of
04790			 STA PMAXLO,Y Sectors
04800			 LDA #$02
04810			 STA PMAXHI,Y
04820			 JSR DSTAT
04830			 LDA ST0TAB,Y  ;Fehler=
04840			 AND #$D0		;keine
04850			 BNE .19		 ;Floppy
04860			 PLA
04870			 STA DRVTAB,Y
04880			 INA
04890			 PHA
04900			 JSR CFGDRV
04910 .19		INY
04920			 CPY #$04
04930			 BCC .18
04940			 PLA
04950			 LDA #$08	 Motor aus
04960			 TRB PORTA
04970			 LDA #$25	 19200 Bd
04980			 STA BAUD	 Sendetakt
04990			 LDA #$FA	 3 Sekunden
05000			 STA OFFDEL  Nachlauf
05010			 JMP WAITCMD
05020 ------------------------------
05030 CFGDRV	JSR IFDISK
05040			 BMI .00		 ;Ja ->
05050			 RTS
05060 .00		JSR MOTON
05070			 LDA #$50
05080			 STA PTRACK,Y
05090			 LDA #$02		;SD/DD
05100			 STA CR
05110			 STA PHD,Y
05120			 LDA #$00		;FM
05130			 STA PMF,Y
05140			 STA HEA
05150			 JSR READID
05160			 BCC .01
05170			 LDA #$04		;MFM
05180			 STA PMF,Y
05190			 LDA #$00
05200			 STA HEA
05210			 JSR READID
05220			 BCC .01
05230			 LDA #$00		;HD/MFM
05240			 STA CR
05250			 STA PHD,Y
05260			 STA HEA
05270			 JSR READID
05280			 BCC .01
05290			 LDA #$00		;HD/FM
05300			 STA PMF,Y
05310			 STA HEA
05320			 JSR READID
05330			 BCC .01
05340			 LDA #$02		;Default
05350			 STA PHD,Y	;ND/FM
05360			 LDA #$00		;80 Byte
05370			 STA PBYTHI,Y
05380			 LDA #$80
05390			 STA PBYTLO,Y
05400			 BNE LASTSEC
05410 .01		LDA ST02EB,Y
05420			 ORA #$40
05430			 STA ST02EB,Y
05440			 LDA NUM		 ;Setze
05450			 STA PBYTHI,Y  ;Disk-
05460			 LDA #$00		;Sektor-
05470			 CMP NUM		 ;L{nge.
05480			 ROR
05490			 STA PBYTLO,Y
05500			 JSR NUMSEC
05510			 JSR SE01BF
05520			 LDA ST02EB,Y read sec.
05530			 ORA #$40	  forces
05540			 STA ST02EB,Y unprot.
05550			 JSR SRDST
05560			 LDA #$01		Seite 1?
05570			 STA HEA
05580			 JSR READID
05590			 BCS .03
05600			 CMP HEA
05610			 BEQ .10
05620 .03		LDA #$00
05630 .10		STA PSIDE,Y
05640			 LDA #$00
05650			 STA HEA
05660			 JSR SPEC
05670			 LDA #40
05680			 JSR SEEK
05690			 JSR READID
05700			 BCS .04
05710			 LDA #77
05720			 JSR SEEK
05730			 JSR READID
05740			 BCS .04
05750			 LDA #80
05760 .04		STA PTRACK,Y
05770 .05		JSR TR00
05780 LASTSEC  LDA PTRACK,Y  ;T*H*S=
05790			 STA DIV		 ;max Sec
05800			 LDX PSIDE,Y
05810			 LDA PSEKLO,Y
05820			 DEX
05830			 BMI .06
05840			 ASL
05850 .06		STA DOR
05860			 LDA #$00
05870			 STA PMAXLO,Y
05880			 STA PMAXHI,Y
05890			 STA DOR+1
05900 .07		LDA DIV
05910			 BNE .08
05920			 RTS
05930 .08		AND #$01
05940			 BEQ .09
05950			 CLC
05960			 LDA PMAXLO,Y
05970			 ADC DOR
05980			 STA PMAXLO,Y
05990			 LDA PMAXHI,Y
06000			 ADC DOR+1
06010			 STA PMAXHI,Y
06020 .09		LSR DIV
06030			 ASL DOR
06040			 ROL DOR+1
06050			 JMP .07
06060 ------------------------------
06070 SE01BF	LDA DAUX1
06080			 PHA
06090			 LDA DAUX2
06100			 PHA
06110			 LDA #1
06120			 STA DAUX1
06130			 STZ DAUX2
06140			 JSR RSEC
06150			 PLA
06160			 STA DAUX2
06170			 PLA
06180			 STA DAUX1
06190			 JSR SBTBF
06200			 LDY #$7F
06210 .01		LDA SECBUF,Y
06220			 STA (BUFADR),Y
06230			 DEY
06240			 BPL .01
06250			 LDY ACTDRV
06260			 RTS
06270 ------------------------------
06280 SBTBF	 TYA
06290			 LSR
06300			 PHA
06310			 ROR
06320			 CLC
06330			 ADC #BOOTBF
06340			 STA BUFADR
06350			 PLA
06360			 ADC /BOOTBF
06370			 STA BUFADR+1
06380			 RTS
06390 ------------------------------
06400 READID	PHA
06410			 LDA #$0A		;CMD
06420			 CLC
06430			 JSR XMTCMD
06440			 JSR RESULTS
06450			 PLA
06460			 RTS
06470 ------------------------------
06480 NUMSEC	LDX #$23	 L|sche
06490 .00		STZ SKEW,X  Tabelle
06500			 DEX
06510			 BPL .00
06520 *						  Drive Sel.
06530			 JSR READID  durch HUT
06540			 LDA #4		Warte auf
06550 .01		BIT PORTA	IDX:
06560			 BEQ .01	  LO-HI
06570 .02		BIT PORTA	HI-LO
06580			 BNE .02
06590 *
06600			 LDX #0
06610 .03		JSR READID  Starte das
06620			 LDA REC	  Lesen der
06630			 CMP SKEW	 Header mit
06640			 BEQ .04	  d. fallen-
06650			 STA SKEW,X  den Flanke
06660			 INX			des Index-
06670			 CPX #$24	 impulses.
06680			 BCC .03
06690 *
06700 .04		TXA
06710			 STA PSEKLO,Y
06720			 LDX #0
06730			 JSR Y40
06740 .05		LDA SKEW,X
06750			 STA SKWADR,Y
06760			 INY
06770			 INX
06780			 CPX #$24
06790			 BNE .05
06800			 LDY ACTDRV
06810			 RTS
06820 ------------------------------
06830 Y40		TYA			Y=Y*40
06840			 ASL
06850			 ASL
06860			 ASL
06870			 STA DIV
06880			 ASL
06890			 ASL
06900			 ADC DIV
06910			 TAY
06920			 RTS
06930 ------------------------------
06940 RSEC	  LDY ACTDRV
06950			 JSR CALC
06960			 LDA CYL
06970			 JSR SEEK
06980			 LDA PBYTLO,Y
06990			 STA DTL
07000			 LDA PBYTHI,Y
07010			 STA NUM
07020			 LDA PSEKLO,Y
07030			 STA EOT
07040 ;
07050			 JSR SECBFL
07060 ;
07070			 LDA #$06		;CMD
07080			 SEC
07090			 JSR XMTCMD
07100 ;
07110			 LDY #$00
07120 .04		LDA #$20		;FDC EXM
07130 .05		BIT FDCST
07140			 BPL .05
07150			 BEQ .06
07160			 LDA FDCDAT
07170			 EOR #$FF
07180			 STA (BUFADR),Y
07190 ;
07200			 INY
07210			 BNE .07
07220			 INC BUFADR+1
07230			 DEC BUFLEN+1
07240 .07		CPY BUFLEN
07250			 BNE .04
07260			 LDA BUFLEN+1
07270			 BNE .04
07280 ;
07290 .06		JMP RESULTS
07300 ------------------------------
07310 WSEC	  LDY ACTDRV
07320			 JSR CALC
07330			 LDA CYL
07340			 JSR SEEK
07350			 LDA PBYTLO,Y
07360			 STA DTL
07370			 LDA PBYTHI,Y
07380			 STA NUM
07390			 LDA PSEKLO,Y
07400			 STA EOT
07410 ;
07420			 JSR SECBFL
07430 ;
07440			 LDA #$05
07450			 SEC
07460			 JSR XMTCMD
07470 ;
07480			 LDY #$00
07490 .01		LDA #$20
07500 .02		BIT FDCST
07510			 BPL .02
07520			 BEQ .04
07530			 LDA (BUFADR),Y
07540			 EOR #$FF
07550			 STA FDCDAT
07560 ;
07570			 INY
07580			 BNE .03
07590			 INC BUFADR+1
07600			 DEC BUFLEN+1
07610 .03		CPY BUFLEN
07620			 BNE .01
07630			 LDA BUFLEN+1
07640			 BNE .01
07650 ;
07660 .04		JMP RESULTS
07670 ------------------------------
07680 FODISK	LDY ACTDRV
07690			 JSR TR00
07700			 LDA PBYTHI,Y
07710			 STA FOTAB	;NUM
07720			 LDA PSEKLO,Y
07730			 STA FOTAB+1 ;EOT
07740			 LDA #$0A
07750			 LDX PMF,Y	;MFM?
07760			 BEQ .01	  ;Nein ->
07770			 ASL
07780 .01		STA FOTAB+2 ;GPL
07790			 LDA #$FF
07800			 STA FOTAB+3 ;FILLER
07810 FOTRK	 LDA PCNTAB,Y
07820			 STA IDTAB	;CYL
07830			 LDA PSIDE,Y
07840			 STA IDTAB+1 ;HEA
07850 FOSIDE	LDA IDTAB+1
07860			 STA HEA
07870			 LDA #$0D	 ;Format
07880			 CLC
07890			 JSR XMTCMD
07900			 LDX #$00
07910 .01		LDA FOTAB,X
07920 .02		BIT FDCST
07930			 BPL .02
07940			 BVS FOERR
07950			 STA FDCDAT
07960			 INX
07970			 CPX #$04
07980			 BCC .01
07990			 LDY #$00
08000 WRID	  LDA SKEW,Y
08010			 STA IDTAB+2 ;REC
08020			 LDX #$00
08030 .01		LDA IDTAB,X
08040 .02		BIT FDCST
08050			 BPL .02
08060			 BVS FOERR
08070			 STA FDCDAT
08080			 INX
08090			 CPX #$04
08100			 BCC .01
08110			 INY
08120			 CPY FOTAB+1 ;EOT
08130			 BNE WRID
08140			 LDA #$08
08150 .03		BIT PORTB
08160			 BEQ .03
08170 FOERR	 LDY ACTDRV
08180			 JSR RESULTS
08190			 BCS FOX
08200			 DEC IDTAB+1 ;HEA
08210			 BPL FOSIDE
08220			 JSR STEPIN
08230			 BCC FOTRK
08240			 JSR TR00
08250			 CLC
08260 FOX		RTS
08270 ------------------------------
08280 SETSKEW  LDX #$05	 Interleave
08290			 LDA PHD,Y	ist es HD?
08300			 BNE .00	  Nein->
08310			 LDX #$0B
08320 .00		LDA PMF,Y
08330			 BEQ .01
08340			 INX			> 128 Byte
08350			 INX			je Sektor
08360 .01		STX INTRLV
08370 ;
08380			 LDA PSEKLO,Y L|sche
08390			 TAX			 Sektor-
08400			 DEX
08410 .02		STZ SKEW,X	tabelle
08420			 DEX
08430			 BPL .02
08440 ;
08450			 LDX #$01
08460			 STX SKWSEC
08470			 DEX
08480			 STX SKEWPT
08490 .03		LDA SKEW,X
08500			 BEQ .04
08510			 INC SKEWPT
08520			 JSR .07
08530			 BCC .03
08540 .04		LDA SKWSEC
08550			 STA SKEW,X
08560			 INC SKWSEC
08570			 LDA PSEKLO,Y
08580			 CMP SKWSEC
08590			 BCC .05
08600			 JSR .06
08610			 BCC .03
08620 .05		RTS
08630 ;
08640 .06		CLC			Addiere
08650			 LDA SKEWPT  Interleave
08660			 ADC INTRLV
08670			 STA SKEWPT
08680 ;
08690 .07		LDA SKEWPT 0<=PT<PSEKLO
08700			 CMP PSEKLO,Y
08710			 BCC .08
08720			 SBC PSEKLO,Y
08730			 STA SKEWPT
08740			 CLC
08750 .08		TAX
08760			 RTS
08770 ------------------------------
08780 MOTOR0	LDA MOTIM+2
08790			 BEQ .01
08800			 INC MOTIM
08810			 BNE .01
08820			 INC MOTIM+1
08830			 BNE .01
08840			 INC MOTIM+2
08850			 BNE .01
08860			 LDA PORTA
08870			 AND #$F7
08880			 STA PORTA
08890 .01		RTS
08900 ------------------------------
08910 IFDISK	JSR SPEC
08920			 JSR DSTAT
08930			 LDA ST3TAB,Y  ;Disk in
08940			 BMI .01		 ;Drive->
08950			 AND #$10		;TR0?
08960			 BEQ .02		 ;Nein ->
08970			 JSR STEPIN
08980 .02		JSR TR00
08990			 JSR DSTAT
09000			 LDA ST3TAB,Y
09010 .01		RTS
09020			 .BL $4B,$FF
09030 ------------------------------
09040 SIOGET	LDA SIOST	Schon was
09050			 AND #$3A	 empfangen?
09060			 LSR
09070			 LSR
09080			 BCC SIOGET  Nein ->
09090			 BNE .01	  Fehler ->
09100			 CLC
09110 .01		ORA STATUS
09120			 STA STATUS
09130			 LDA SIODAT  Bei Fehler
09140			 RTS			ist C=1
09150 ------------------------------
09160 SIOPUT	PHA
09170			 STA SIODAT
09180 .01		LDA PORTA
09190			 AND #$FE
09200			 STA PORTA
09210			 ORA #$01
09220			 STA PORTA
09230			 LDA BAUD
09240 .02		DEA
09250			 BNE .02
09260			 LDA #$04
09270			 BIT SIOST
09280			 BEQ .01
09290			 PLA
09300			 RTS
09310 ------------------------------
09320 CHKSUM	CLC
09330			 ADC PSUMME
09340			 ADC #$00
09350			 STA PSUMME
09360			 RTS
09370 ------------------------------
09380 BOOTSEC  LDA DAUX2	;Ist es
09390			 BNE .01	  ;ein Boot-
09400			 LDA DAUX1	;sektor ?
09410			 CMP #$04
09420			 BCS .01
09430			 LDA #$80
09440			 STA BUFLEN
09450			 STZ BUFLEN+1
09460			 JMP SSECBF  ;Ja
09470 .01		JMP SECBFL  ;Nein
09480 ------------------------------
09490 RECV	  JSR SIOGET	Lese Byte
09500			 BCS .02		Fehler ->
09510			 STA (BUFADR) Schleife
09520			 JSR CHKSUM	bis
09530			 JSR BUFINC	Puffer
09540			 BCC RECV	  voll ->
09550			 JSR SIOGET
09560			 CMP PSUMME
09570			 PHP
09580			 LDA #$30
09590			 STA T0064D
09600 .01		BIT IFLG
09610			 BPL .01
09620			 PLP
09630			 BNE POP
09640			 LDA #ACK
09650			 JMP SIOPUT  ;ok, Ret.
09660 ;
09670 .02		LDA #3		Timeout
09680			 STA T1024D  768 us
09690 .03		LDA SIOST
09700			 LSR
09710			 LSR
09720			 BIT IFLG
09730			 BMI POP
09740			 BCC .03
09750			 LDA SIODAT
09760			 BCS .02
09770 ;
09780 POP		PLA
09790			 PLA
09800 ;
09810 DATNACK  LDA ST02EA,Y
09820			 ORA #$02
09830			 STA ST02EA,Y
09840			 LDA #NACK
09850			 JMP XIT	  ;Err, POP
09860 ------------------------------
09870 XMIT	  LDA (BUFADR)
09880			 STA SIODAT
09890			 JSR CHKSUM
09900 .01		LDA PORTA	TxCLK LO
09910			 AND #$FE
09920			 STA PORTA
09930			 ORA #$01	 TxCLK HI
09940			 STA PORTA
09950			 LDA BAUD	 Verz|ge-
09960 .02		DEA			rung, gem.
09970			 BNE .02	  Baudrate
09980			 LDA #$01	 Warte auf
09990			 BIT SIOST	T_Ready
10000			 BEQ .01
10010			 JSR BUFINC
10020			 BCC XMIT
10030			 LDA PSUMME
10040			 JMP SIOPUT
10050 ------------------------------
10060 MOTON	 LDA #$08	 Motor an
10070			 TSB PORTA
10080			 BNE .03	  war an ->
10090			 PHX
10100			 LDX #8		500 ms
10110 .01		LDA #$FF	 Motorhoch-
10120			 STA T1024D  laufzeit
10130 .02		BIT IFLG
10140			 BPL .02
10150			 DEX
10160			 BNE .01
10170			 PLX
10180 .03		LDA OFFDEL  Motornach-
10190			 STA MOTIM+2 laufzeit
10200			 STZ MOTIM+1
10210			 STZ MOTIM
10220			 RTS
10230 ------------------------------
10240 WAITCMD  BIT SIOST	Wait 'til
10250			 BPL WAITCMD CMD end
10260			 LDY #$00
10270			 STY STATUS
10280			 STY PSUMME
10290 .03		LDA SIODAT  Clr Bugs
10300			 JSR MOTOR0  3s delay
10310			 BIT SIOST	CMD set?
10320			 BMI .03	  No ->
10330			 BIT PORTB	Host on?
10340			 BVS WAITCMD No ->
10350			 LDA #$37	 SIO an
10360			 STA SIOCMD
10370			 JSR SIOGET
10380			 BCS WAITCMD
10390			 STA DRIVE
10400			 STA PSUMME
10410			 LDA #$FF	 Baudrate
10420			 STA T0064D  ermitteln
10430			 INY
10440 .01		JSR SIOGET
10450			 BCS WAITCMD
10460			 STA DRIVE,Y
10470			 JSR CHKSUM
10480			 INY
10490			 CPY #$05
10500			 BNE .01
10510			 BIT IFLG
10520			 BMI WAITCMD
10530			 LDY RTIMID
10540			 STY RTIMIDZ
10550 .04		BIT SIOST
10560			 BPL .04
10570			 CMP PSUMME
10580			 BNE WAITCMD
10590 ;
10600 DRVCHK	LDY #$03
10610 .01		LDA DRVTAB,Y
10620			 BMI .02
10630			 BIT PORTB
10640			 BPL .02
10650			 INA
10660 .02		AND #$7F
10670			 CMP DRIVE
10680			 BEQ DRVFND
10690			 DEY
10700			 BPL .01
10710			 BMI WAITCMD
10720 ;
10730 DRVFND	STY ACTDRV
10740			 LDA #$25
10750			 LDX RTIMIDZ
10760			 CPX #$80
10770			 BCC .01
10780			 LDA PBAUD,Y
10790 .01		STA BAUD
10800 ;
10810 CMDCHK	LDX #$1F
10820			 LDA COMAND
10830 .01		CMP RRAM,X
10840			 BEQ CMDJMP
10850			 DEX
10860			 BPL .01
10870 ;
10880 CMDNACK  LDA ST02EA,Y
10890			 ORA #$01
10900			 STA ST02EA,Y
10910			 LDA #NACK
10920			 JMP XIT
10930 ;
10940 CMDJMP	CPX #$05	  Ext. CMD?
10950			 BCC .01		Nein ->
10960			 LDA HPYFLG,Y Happy ist
10970			 BMI CMDNACK  aus ->
10980 .01		CPX #$03	  R/W SEC?
10990			 BCS .04		No ->
11000 ;
11010			 LDA DAUX2	 Sektor #
11020			 BPL .02		negativ?
11030			 LDA HPYFLG,Y Ram/Rom
11040			 BMI CMDNACK  Adr. wenn
11050			 BPL .04		Happy an.
11060 ;
11070			 LDA DAUX2	 Es gibt
11080 .02		ORA DAUX1	 keinen
11090			 BEQ CMDNACK  Sektor 0!
11100 ;
11110			 SEC			 Sektor -
11120			 LDA PMAXLO,Y nummer zu
11130			 SBC DAUX1	 gro~?
11140			 LDA PMAXHI,Y
11150			 SBC DAUX2
11160			 BCC CMDNACK  Ja ->
11170 ;
11180 .04		JSR SPEC
11190			 LDA #ACK
11200			 JSR SIOPUT
11210			 STZ PSUMME
11220			 LDA RRAM+$20,X
11230			 STA DIV
11240			 LDA RRAM+$40,X
11250			 STA DIV+1
11260			 JMP (DIV)
11270 ;
11280 CMDTAB	.AS "PWR!S"	  ;$97A0
11290			 .AS " ?AHNOQThif"
11300			 .BL $10,$00
11310 ;
11320			 .DA #PTSEC,#WRSEC
11330			 .DA #RDSEC,#FORMT
11340			 .DA #STATS
11350			 .DA #AUTOF,#GETBD
11360			 .DA #CHCMD,#HAPPY
11370			 .DA #RPERC,#WPERC
11380			 .DA #QQQQQ,#RDRAM
11390			 .DA #RSIOL,#RSIOD
11400			 .DA #CUSTM
11410			 .BL $10,$00
11420 ;
11430			 .DA /PTSEC,/WRSEC
11440			 .DA /RDSEC,/FORMT
11450			 .DA /STATS
11460			 .DA /AUTOF,/GETBD
11470			 .DA /CHCMD,/HAPPY
11480			 .DA /RPERC,/WPERC
11490			 .DA /QQQQQ,/RDRAM
11500			 .DA /RSIOL,/RSIOD
11510			 .DA /CUSTM
11520			 .BL $10,$00
11530 ------------------------------
11540 RWMEM	 JSR SECBFL
11550			 LDA COMAND
11560			 CMP #'R
11570			 BEQ .04
11580 ;
11590			 JSR RECV
11600			 BIT DAUX2
11610			 BVC .01
11620			 JMP XERR
11630 ;
11640 .01		JSR SSECBF
11650 .02		LDA (BUFADR)
11660			 STA (DAUX1)
11670			 INC DAUX1
11680			 BNE .03
11690			 INC DAUX2
11700 .03		JSR BUFINC
11710			 BCC .02
11720			 JMP XWOK
11730 ;
11740 .04		LDA DAUX1
11750			 STA BUFADR
11760			 LDA DAUX2
11770			 STA BUFADR+1
11780			 LDA #COMPLT
11790			 JSR SIOPUT
11800			 JSR SBFEND
11810			 JSR XMIT
11820			 JMP WAITCMD
11830 ------------------------------
11840 WRSEC
11850 PTSEC	 LDA DAUX2	RAM Adr.?
11860			 BPL .00
11870			 JMP RWMEM
11880 ;
11890 .00		JSR BOOTSEC
11900			 JSR RECV
11910			 JSR DSTAT
11920			 LDA ST3TAB,Y
11930			 BMI .01
11940			 JSR CFGDRV
11950			 BPL .02
11960 .01		LDA HPYFLG,Y
11970			 LSR
11980			 BCS .03
11990			 JSR MOTON
12000			 JSR SSECBF
12010			 JSR WSEC
12020			 LDA ST2TAB,Y
12030			 AND #$10
12040			 BEQ .03
12050			 JSR TR00
12060			 JSR WSEC
12070 .03		PHP
12080			 JSR SRDST
12090			 PLP
12100			 BCS .02
12110			 LDA DAUX2
12120			 BNE .04
12130			 LDA DAUX1
12140			 CMP #1
12150			 BNE .04
12160			 JSR SE01BF
12170 .04		JMP XWOK
12180 .02		JMP XERR
12190 ------------------------------
12200 RDSEC	 LDA DAUX2
12210			 BPL .00
12220			 JMP RWMEM
12230 ;
12240 .00		JSR DSTAT
12250			 LDA ST02EB,Y
12260			 ORA #$40
12270			 STA ST02EB,Y
12280			 LDA ST3TAB,Y;Dsk still
12290			 BMI .01	  ;in Drive
12300			 JSR CFGDRV
12310			 LDA ST3TAB,Y
12320			 BPL .03	  ;No Disk
12330 .01		LDA DAUX2
12340			 BNE .02
12350			 LDA DAUX1
12360			 CMP #1
12370			 BNE .02
12380			 JMP RSECRAM
12390 .02		JSR MOTON
12400			 JSR RSEC
12410			 BCC .04
12420			 LDA ST2TAB,Y
12430			 AND #$10
12440			 BEQ .03
12450			 JSR TR00
12460			 JSR RSEC
12470			 BCC .04
12480 .03		LDA #ERROR
12490			 .HX 2C
12500 .04		LDA #COMPLT ;Sektor ok
12510			 JSR SIOPUT
12520			 JSR BOOTSEC
12530			 JSR XMIT
12540			 JSR SRDST
12550			 JMP WAITCMD
12560 ;
12570 RSECRAM  JSR SBTBF
12580			 LDA #$80
12590			 STA BUFLEN
12600			 STZ BUFLEN+1
12610			 JSR SBFEND
12620			 LDA #COMPLT
12630			 JSR SIOPUT
12640			 JSR XMIT
12650			 JSR SRDST
12660			 JMP WAITCMD
12670 ------------------------------
12680 FORMT	 JSR IFDISK
12690			 SEC
12700			 BPL .07
12710			 LDA HPYFLG,Y
12720			 LSR
12730			 BCS .07
12740			 JSR MOTON
12750			 JSR SETSKEW
12760			 JSR FODISK
12770			 LDA #$FF
12780			 BCC .04
12790 .07		LDA #$00
12800 .04		LDX #$00
12810 .05		STA SIOBUF,X
12820			 INX
12830			 BNE .05
12840			 BCS .06
12850			 JSR LASTSEC
12860			 LDA #COMPLT
12870			 .HX 2C
12880 .06		LDA #ERROR
12890			 JSR SIOPUT
12900			 LDA PBYTLO,Y
12910			 STA BUFLEN
12920			 LDA PBYTHI,Y
12930			 STA BUFLEN+1
12940			 JSR SSIOBF
12950			 JSR XMIT
12960			 JSR SRDST
12970			 JMP WAITCMD
12980 ------------------------------
12990			 .IN "D:STATS.BIB
13000 ------------------------------
13010 AUTOF	 JSR IFDISK
13020			 BPL .01	  No Disk
13030			 ASL
13040			 BMI .01	  Write prot
13050			 LDA HPYFLG,Y
13060			 LSR
13070			 BCS .01
13080			 LDA #COMPLT
13090			 JSR SIOPUT
13100			 JSR MOTON
13110			 JSR SETSKEW
13120			 JSR FODISK
13130			 JMP WAITCMD
13140 ;
13150 .01		JMP XERR
13160 ------------------------------
13170 GETBD	 LDA #COMPLT
13180			 JSR SIOPUT
13190			 LDA PBAUD,Y
13200			 JSR SIOPUT
13210			 JMP XIT
13220 ------------------------------
13230 CHCMD	 LDA #3		  Lese 3
13240			 STA BUFLEN	 Bytes
13250			 STZ BUFLEN+1
13260			 JSR SSIOBF
13270			 JSR RECV
13280			 LDA SIOBUF
13290			 AND #$7F
13300			 STA SIOBUF+3
13310			 LDX #0
13320 .01		LDA RRAM,X	 Eintrag
13330			 BEQ .02		 frei
13340			 AND #$7F
13350			 CMP SIOBUF+3  Eintrag
13360			 BEQ .02		vorhanden
13370			 INX
13380			 CPX #$20
13390			 BCC .01
13400			 JMP XERR
13410 ;
13420 .02		LDA SIOBUF+1
13430			 ORA SIOBUF+2
13440			 BNE .04
13450 .03		LDA RRAM+1,X
13460			 STA RRAM,X
13470			 LDA RRAM+$21,X
13480			 STA RRAM+$20,X
13490			 LDA RRAM+$41,X
13500			 STA RRAM+$40,X
13510			 INX
13520			 CPX #$1F
13530			 BCC .03
13540			 STZ RRAM,X
13550			 STZ RRAM+$20,X
13560			 STZ RRAM+$40,X
13570			 JMP XWOK		gel|scht
13580 ;
13590 .04		LDA SIOBUF
13600			 STA RRAM,X
13610			 LDA SIOBUF+1
13620			 STA RRAM+$20,X
13630			 LDA SIOBUF+2
13640			 STA RRAM+$40,X
13650			 JMP XWOK	eingetragen
13660 ;
13670 ------------------------------
13680 HAPPY	 LDX #$0F
13690 .01		LDA HAPTAB,X
13700			 CMP DAUX1
13710			 BEQ .02
13720			 DEX
13730			 BPL .01
13740			 JMP XERR
13750 ;
13760 .02		LDA HAPTAB+$10,X
13770			 STA DIV
13780			 LDA HAPTAB+$20,X
13790			 STA DIV+1
13800			 JMP (DIV)
13810 ;
13820 HAPTAB	.HX 00010203
13830			 .HX 182060E0
13840			 .BL $08,$FF
13850 ;
13860			 .DA #HPY1,#OFFD
13870			 .DA #NDVN,#IDRV
13880			 .DA #WRPE,#FAWR
13890			 .DA #SLOW,#HOFF
13900			 .DA #XERR,#XERR
13910			 .DA #XERR,#XERR
13920			 .DA #XERR,#XERR
13930			 .DA #XERR,#XERR
13940 ;
13950			 .DA /HPY1,/OFFD
13960			 .DA /NDVN,/IDRV
13970			 .DA /WRPE,/FAWR
13980			 .DA /SLOW,/HOFF
13990			 .DA /XERR,/XERR
14000			 .DA /XERR,/XERR
14010			 .DA /XERR,/XERR
14020			 .DA /XERR,/XERR
14030 ;
14040 HPY1	  LDA DAUX2
14050			 CMP #$80
14060			 BNE .01
14070			 JMP XWOK
14080 .01		JMP CMDNACK
14090 ;
14100 OFFD	  LDA DAUX2
14110			 LSR
14120			 LSR
14130			 LSR
14140			 LSR
14150			 LSR
14160			 CLC
14170			 ADC #$F8
14180			 STA OFFDEL
14190			 JMP XWOK
14200 ;
14210 NDVN	  LDX ACTDRV
14220			 LDA DAUX2	Befehl ok?
14230			 BPL .03	  Fehler ->
14240			 AND #$7F
14250			 CMP #$3A	 Nummer
14260			 BCS .03	  1...9
14270			 CMP #$31	 erlaubt
14280			 BCC .03
14290			 LDY DRVTAB,X Alte Nr.
14300			 STY DIV		retten u.
14310			 LDY #$00	  Eintrag
14320			 STZ DRVTAB,X l|schen.
14330			 BIT PORTB
14340			 BPL .01
14350			 DEA
14360 .01		CMP DRVTAB,Y Gibt es
14370			 BEQ .02		schon ->
14380			 INY
14390			 CPY #4
14400			 BCC .01
14410			 LDA DAUX2	 Setze
14420			 STA DRVTAB,X Kennung
14430			 JMP XWOK
14440 ;
14450 .02		LDA DIV
14460			 STA DRVTAB,X
14470 .03		JMP CMDNACK
14480 ;
14490 IDRV	  LDA DAUX2
14500			 BNE .01
14510			 STA HPYFLG,Y
14520			 CLC
14530			 TYA
14540			 ADC #$31
14550			 STA DRVTAB,Y
14560			 LDA #$FA
14570			 STA OFFDEL
14580			 JSR MOTON
14590			 JSR CFGDRV
14600			 JMP XWOK
14610 .01		JMP CMDNACK
14620 ;
14630 WRPE	  LDA HPYFLG,Y
14640			 LDX DAUX2
14650			 CPX #$10
14660			 BNE .01
14670			 ORA #$01
14680			 BNE .02
14690 .01		CPX #$08
14700			 BNE .03
14710			 AND #$FE
14720 .02		STA HPYFLG,Y
14730			 JMP XWOK
14740 .03		JMP CMDNACK
14750 ;
14760 FAWR	  LDA DAUX2
14770			 BNE .01
14780			 LDA HPYFLG,Y
14790			 ORA #$02
14800			 STA HPYFLG,Y
14810			 JMP XWOK
14820 .01		JMP CMDNACK
14830 ;
14840 SLOW	  LDA DAUX2
14850			 CMP #$60
14860			 BNE .01
14870			 LDA HPYFLG,Y
14880			 ORA #$4
14890			 STA HPYFLG,Y
14900			 JMP XWOK
14910 .01		JMP CMDNACK
14920 ;
14930 HOFF	  LDA DAUX2
14940			 CMP #$E0
14950			 BNE .01
14960			 LDA HPYFLG,Y
14970			 ORA #$80
14980			 STA HPYFLG,Y
14990			 JMP XWOK
15000 .01		JMP CMDNACK
15010 ------------------------------
15020 RPERC	 LDA #COMPLT
15030			 JSR SIOPUT
15040 .01		LDA PTRACK,Y
15050			 JSR SIOPUT
15060			 JSR CHKSUM
15070			 INY
15080			 INY
15090			 INY
15100			 INY
15110			 CPY #$30
15120			 BCC .01
15130			 BCS XRD
15140 ------------------------------
15150 CUSTM
15160 WPERC	 LDA #12
15170			 LDX COMAND
15180			 CPX #'f
15190			 BNE .00
15200			 LDA #128
15210 .00		STA BUFLEN
15220			 LDA #0
15230			 STA BUFLEN+1
15240			 TAX
15250			 JSR SSIOBF
15260			 JSR RECV
15270 .01		LDA SIOBUF,X
15280			 STA PTRACK,Y
15290			 INX
15300			 INY
15310			 INY
15320			 INY
15330			 INY
15340			 CPY #$30
15350			 BCC .01
15360 ;
15370			 LDY ACTDRV
15380			 LDA PSTEPR,Y Steprate
15390			 CMP #$02	  minimal
15400			 BCS .04		2 ms
15410			 LDA #$02
15420			 STA PSTEPR,Y
15430 ;
15440 .04		JSR SPEC	  HD ?
15450			 LDA COMAND
15460			 CMP #'f
15470			 BNE .03
15480			 LDY #0
15490 .02		LDA SIOBUF,X
15500			 STA SKEW,Y
15510			 INX
15520			 INY
15530			 CPY SIOBUF+3
15540			 BCC .02
15550			 LDY ACTDRV
15560			 JSR IFDISK
15570			 BPL XERR
15580			 JSR MOTON
15590			 JSR FODISK
15600			 BCS XERR
15610			 JSR LASTSEC
15620 .03		JMP XWOK
15630 ------------------------------
15640 QQQQQ	 LDA #$08
15650			 TRB PORTA
15660			 LDA #COMPLT
15670			 JSR SIOPUT
15680			 JMP WAITCMD
15690 ------------------------------
15700 XRD		LDA PSUMME
15710			 .HX 2C
15720 XWOK	  LDA #COMPLT
15730			 .HX 2C
15740 XERR	  LDA #ERROR
15750 XIT		JSR SIOPUT
15760			 JMP WAITCMD
15770 ------------------------------
15780 RDRAM	 LDA DAUX1
15790			 STA BUFADR
15800			 LDA DAUX2
15810			 STA BUFADR+1
15820			 STZ BUFLEN
15830			 LDA #$01
15840			 STA BUFLEN+1
15850			 LDA #COMPLT
15860			 JSR SIOPUT
15870			 JSR SBFEND
15880			 JSR XMIT
15890			 JMP WAITCMD
15900 ------------------------------
15910 RSIOL	 LDA #COMPLT
15920			 JSR SIOPUT
15930			 LDA #$02
15940			 STA BUFLEN
15950			 STZ BUFLEN+1
15960			 LDA #USIOL
15970			 STA BUFADR
15980			 LDA /USIOL
15990			 STA BUFADR+1
16000			 JSR SBFEND
16010			 JSR XMIT
16020			 JMP WAITCMD
16030 USIOL	 .DA USIOE-USIOA
16040 ------------------------------
16050 RSIOD	 LDA USIOL	Puffer f}r
16060			 STA BUFLEN  SIO setzen
16070			 LDA USIOL+1
16080			 STA BUFLEN+1
16090			 JSR SSIOBF
16100			 LDA #USIOA  Errechne
16110			 STA DIV	  Differenz
16120			 SEC			zur Ziel -
16130			 SBC DAUX1	adresse
16140			 STA DAUX1
16150			 LDA /USIOA  DIV zeigt
16160			 STA DIV+1	auf die
16170			 SBC DAUX2	Adresse im
16180			 STA DAUX2	ROM
16190 ;
16200			 LDX #$00	  Zu ver -
16210 .01		LDA ABSTBL,X legende
16220			 CMP DIV		Adresse?
16230			 BNE .02
16240			 LDA ABSTBL+1,X
16250			 CMP DIV+1
16260			 BNE .02
16270			 JSR .04		Byte aus
16280			 SEC			 ROM
16290			 SBC DAUX1	 umrechnen
16300			 PHP
16310			 JSR .06
16320			 JSR .04
16330			 PLP
16340			 SBC DAUX2
16350			 JSR .06
16360			 INX			 Zeiger
16370			 INX			 auf naechste
16380			 BNE .03		Adresse
16390 .02		JSR .04
16400			 JSR .06
16410 .03		LDA DIV		Ende
16420			 CMP #USIOE	erreicht?
16430			 BNE .01
16440			 LDA DIV+1
16450			 CMP /USIOE
16460			 BNE .01
16470			 LDA #COMPLT  Ja.
16480			 JSR SIOPUT	Puffer
16490			 JSR SSIOBF	senden
16500			 JSR XMIT
16510			 JMP WAITCMD
16520 ;
16530 .04		LDA (DIV)	 Byte
16540			 INC DIV		lesen,
16550			 BNE .05		Zeiger
16560			 INC DIV+1	 erh|hen.
16570 .05		RTS
16580 ;
16590 .06		STA (BUFADR)
16600			 JMP BUFINC
16610 ------------------------------
16620			 .IN "D:EPSIO.BIB
16630 ------------------------------
16640			 .OR $FFF9
16650 IRQ
16660 NMI		RTI
16670			 .DA NMI
16680			 .DA RESET
16690			 .DA IRQ
16700 ------------------------------
}}}
! STATS.BIB
{{{
00010 STATS	 JSR DSTAT
00020 *-02EA-*
00030			 LDA ST02EA,Y  0,1
00040			 AND #$03
00050			 STA DIV
00060			 LDA ST1TAB,Y  2 (WE)
00070			 ASL
00080			 AND #4
00090			 TSB DIV
00100			 LDA ST3TAB,Y  3 (WP)
00110			 AND #8
00120			 TSB DIV
00130			 LDA PORTA	  4 (MOT)
00140			 ASL
00150			 AND #$10
00160			 TSB DIV
00170			 LDA PBYTHI,Y  5 (DD)
00180			 CMP #$01
00190			 BCC .01
00200			 .DA #SB5,#DIV
00210 .01		LDA PSEKLO,Y  7 (MD)
00220			 CMP #$13		;>18=MD
00230			 LDA PBYTHI,Y  ;if not
00240			 BEQ .02		 ;>128
00250			 CLC			  ;By/Sec
00260 .02		BCC .03
00270			 .DA #SB7,#DIV
00280 .03		LDA DIV
00290			 STA ST02EA,Y
00300			 STA SIOBUF
00310 *-02EB-*
00320			 LDA ST02EB,Y  (2-6)
00330			 AND #$7C
00340			 STA DIV
00350			 LDA ST3TAB,Y  7 (DC)
00360			 AND #$80
00370			 TSB DIV
00380			 LDA FDCST	  0,1
00390			 AND #$50
00400			 ASL
00410			 ASL
00420			 ASL
00430			 ASL
00440			 CMP #2
00450			 BCC .04
00460			 EOR #6
00470 .04		EOR #3
00480			 ORA DIV
00490			 STA ST02EB,Y
00500			 STA SIOBUF+1
00510 *-02EC-*
00520			 LDA #$E0		Timeout
00530			 STA ST02EC,Y
00540			 STA SIOBUF+2
00550 *-02ED-*
00560			 LDA FDCST
00570			 STA ST02ED,Y
00580			 STA SIOBUF+3
00590 ;
00600			 LDA #COMPLT	Senden
00610			 JSR SIOPUT
00620			 LDA #4
00630			 STA BUFLEN
00640			 STZ BUFLEN+1
00650			 JSR SSIOBF
00660			 JSR XMIT
00670 ;
00680			 LDA ST02EA,Y
00690			 AND #$FC
00700			 STA ST02EA,Y
00710 ;
00720			 LDA ST02EB,Y
00730			 AND #$83
00740			 ORA #$18
00750			 STA DIV
00760			 LDA ST3TAB,Y
00770			 AND #$40
00780			 EOR #$40
00790			 TSB DIV
00800			 LDA ST3TAB,Y
00810			 AND #$10
00820			 LSR
00830			 LSR
00840			 ORA DIV
00850			 STA ST02EB,Y
00860			 JMP WAITCMD
00870 ------------------------------
00880 SRDST	 LDY ACTDRV
00890			 LDA ST02EB,Y  Reset
00900			 ORA #$3C		2,3,4,5
00910			 STA DIV
00920			 LDA ST2TAB,Y  5 (CM)
00930			 AND #$40
00940			 LSR
00950			 TRB DIV
00960			 LDA ST1TAB,Y  5,4,?,2
00970			 AND #$34		->
00980			 LSR			  2,5,4
00990			 LSR
01000			 LSR
01010			 BCC .01
01020			 ORA #8
01030 .01		ASL
01040			 EOR #$FF
01050			 AND DIV
01060			 STA ST02EB,Y
01070			 RTS
01080 ------------------------------
}}}
! EPSIO.BIB
{{{
01000 * High-Speed SIO-Driver, will
01010 * be relocated by HDI and
01020 * send to computer.
01030 ;
01040 USIOA	 LDA $0301	  ;DUNIT
01050			 BNE SIO2
01060			 LDX #$08
01070 DLWTBLL  STA LWTBL-1,X ;$F614
01080			 DEX
01090			 BNE DLWTBLL
01100			 RTS
01110 SIO2	  TAX
01120 REL01	 LDA LWTBL-1,X ;$F614
01130			 BNE SIO3
01140			 LDA #$28
01150 REL02	 STA LWTBL-1,X ;$F614
01160			 LDY #$07
01170 SIOCL	 LDA $0302,Y	;DCOMND
01180			 PHA
01190 REL03	 LDA C3F,Y	  ;$F60D
01200			 STA $0302,Y	;DCOMND
01210			 DEY
01220			 BPL SIOCL
01230 REL04	 JSR SIO3		;$F450
01240			 LDX $0301	  ;DUNIT
01250			 LDY $0303	  ;DSTATS
01260			 BMI SIO21
01270			 LDA $01
01280 REL05	 STA LWTBL-1,X ;$F614
01290 SIO21	 LDY #$00
01300 SIO21CL  PLA
01310			 STA $0302,Y	;DCOMND
01320			 INY
01330			 CPY #$08
01340			 BCC SIO21CL
01350 SIO3	  SEI
01360			 TXA
01370			 ORA #$30
01380			 STA $023A	  ;CDEVIC
01390			 LDA $0302	  ;DCOMND
01400			 STA $023B	  ;CCOMND
01410			 LDA $030A	  ;DAUX1
01420			 STA $023C	  ;CAUX1
01430			 LDA $030B	  ;DAUX2
01440			 STA $023D	  ;CAUX2
01450 REL06	 LDA LWTBL-1,X ;$F614
01460			 STA $D204	  ;AUDF3
01470			 TSX
01480			 STX $3F		 ;FEOF
01490			 LDA #$02
01500			 STA $37		 ;DRETRY
01510 IO11	  LDA #$07
01520			 STA $36		 ;CRETRY
01530 IO12	  LDA #$34
01540			 STA $D303
01550			 LDA #$00
01560			 STA $30		 ;STATUS
01570			 STA $3E		 ;FTYPE
01580			 STA $35		 ;BUFEND+1
01590			 STA $D206	  ;AUDF4
01600			 LDA #$3A
01610			 STA $32		 ;BUFADR
01620			 LDA #$02
01630			 STA $33		 ;BUFADR+1
01640			 ASL
01650			 STA $34		 ;BUFEND
01660 REL07	 JSR SEND1	  ;$F4DC
01670			 LDA $0304	  ;DBUFLO
01680			 STA $32		 ;BUFADR
01690			 LDA $0305	  ;DBUFHI
01700			 STA $33		 ;BUFADR+1
01710			 LDA $0308	  ;DBYTLO
01720			 STA $34		 ;BUFEND
01730			 LDA $0309	  ;DBYTHI
01740			 STA $35		 ;BUFEND+1
01750			 LDA $0303	  ;DSTATS
01760			 BPL IO2
01770 REL08	 JSR SEND1	  ;$F4DC
01780 IO2		DEC $3E		 ;FTYPE
01790 REL09	 JSR SETTI1	 ;$F544
01800			 BIT $0303	  ;DSTATS
01810			 BVC IO3
01820 REL10	 JSR GETA1	  ;$F521
01830 IO3		LDA #$A0
01840			 STA $D207	  ;AUDC4
01850			 LDA $10
01860			 STA $D20E	  ;IRQEN
01870 REL11	 JSR CLRTI1	 ;$F576
01880			 LDA $30		 ;STATUS
01890			 BEQ IO4
01900			 DEC $37		 ;DRETRY
01910			 BNE IO11
01920 IO4		TAY
01930			 BNE IO5
01940			 INY
01950 IO5		STY $0303	  ;DSTATS
01960			 CLI
01970			 RTS
01980 SEND1	 LDY #$00
01990 SE1		INY
02000			 BNE SE1
02010			 LDA #$23
02020 REL12	 JSR POKEY	  ;$F5F7
02030			 LDA ($32),Y	;BUFADR
02040			 STA $31		 ;CHKSUM
02050			 STA $D20D	  ;SEROUT
02060			 INY
02070			 BNE SE3
02080 SE2		LDA ($32),Y	;BUFADR
02090 REL13	 JSR PUTBYTE	;$F5D4
02100			 INY
02110			 BNE SE3
02120			 INC $33		 ;BUFADR+1
02130			 DEC $35		 ;BUFEND+1
02140			 LDX #$E0
02150 SEWL	  INX
02160			 BNE SEWL
02170 SE3		CPY $34		 ;BUFEND
02180			 BNE SE2
02190			 LDA $35		 ;BUFEND+1
02200			 BNE SE2
02210			 LDA $31		 ;CHKSUM
02220 REL14	 JSR PUTBYTE	;$F5D4
02230 SEO1	  LDA $D20E	  ;IRQST
02240			 AND #$08
02250			 BNE SEO1
02260			 LDY #$03
02270 REL15	 JSR STOUTX0	;$F578
02280			 LDA #$C0
02290			 STA $D20E	  ;IRQEN
02300			 BNE RDQUIT
02310 GETA1	 LDY #$00
02320			 STY $31		 ;CHKSUM
02330 GE1		JSR GETBYTE	;$F5B1
02340			 STA ($32),Y	;BUFADR
02350 REL16	 JSR ADDSUM	 ;$F5EF
02360			 INY
02370			 BNE GE2
02380			 INC $33		 ;BUFADR+1
02390			 DEC $35		 ;BUFEND+1
02400 GE2		CPY $34		 ;BUFEND
02410			 BNE GE1
02420			 LDA $35		 ;BUFEND+1
02430			 BNE GE1
02440 REL17	 JSR GETBYTE	;$F5B1
02450			 CMP $31		 ;CHKSUM
02460			 BNE ERR8F
02470			 RTS
02480 SETTI1	LDA $0306	  ;DTIMLO
02490			 ROR
02500			 ROR
02510			 TAY
02520			 AND #$3F
02530			 TAX
02540			 TYA
02550			 ROR
02560			 AND #$C0
02570			 TAY
02580 REL18	 JSR STOUT	  ;$F57A
02590 RDQUIT	LDA #$3C
02600			 STA $D303
02610			 LDA #$13
02620 REL19	 JSR POKEY	  ;$F5F7
02630 REL20	 JSR GETBYTE	;$F5B1
02640			 CMP #$41
02650			 BEQ CLRTI1
02660			 CMP #$43
02670			 BEQ CLRTI1
02680			 CMP #$45
02690			 BEQ ERR90
02700			 LDA #$8B
02710			 BNE ERR
02720 ERR90	 LDA #$90
02730			 STA $30		 ;STATUS
02740 CLRTI1	LDY #$00
02750 STOUTX0  LDX #$00
02760 STOUT	 LDA ERRABS	 ;$F
02770			 STA $0226	  ;CDTMA1
02780 STOU2	 LDA ERRABS+1  ;$F
02790			 STA $0227	  ;CDTMA1+1
02800			 LDA #$01
02810			 JMP $E45C	  ;Setze CDTMV1
02820 ERRABS	.DA ERR8A	  ;$F
02830 IOER80	LDX $3F		 ;FEOF
02840			 TXS
02850			 LDA #$80
02860			 STA $30		 ;STATUS
02870			 BNE EABS3
02880 ERR8F	 LDA #$8F
02890			 .HX 2C
02900 ERR8A	 LDA #$8A		;Timeout
02910 ERR		STA $30		 ;STATUS
02920			 LDX $3F		 ;FEOF
02930			 TXS
02940			 LDA $3E		 ;FTYPE
02950			 BMI ERRA
02960			 DEC $36		 ;CRETRY
02970			 BEQ ERRA
02980 REL21	 JMP IO12		;$F47A
02990 ERRA	  LDA #$28
03000			 STA $D204	  ;AUDF3
03010 EABS3	 JMP IO3		 ;$F4C1
03020 GETBYTE  LDA $D20E	  ;IRQST
03030			 BPL IOER80
03040			 AND #$20
03050			 BNE GETBYTE
03060			 LDA #$DF
03070			 STA $D20E	  ;IRQEN
03080			 LDA #$E0
03090			 STA $D20E	  ;IRQEN
03100			 LDA $D20F	  ;SKSTAT
03110			 STA $D20A	  ;SKRES
03120			 BPL ERR8A
03130			 AND #$20
03140			 BEQ ERR8A
03150			 LDA $D20D	  ;SERIN
03160			 RTS
03170 PUTBYTE  TAX
03180 PUTA1	 LDA $D20E	  ;IRQST
03190			 AND #$10
03200			 BNE PUTA1
03210			 LDA #$EF
03220			 STA $D20E	  ;IRQEN
03230			 LDA #$D0
03240			 STA $D20E	  ;IRQEN
03250			 TXA
03260			 STA $D20D	  ;SEROUT
03270			 LDX $D20E	  ;IRQST
03280			 BPL IOER80
03290 ADDSUM	CLC
03300			 ADC $31		 ;CHKSUM
03310			 ADC #$00
03320			 STA $31		 ;CHKSUM
03330			 RTS
03340 POKEY	 STA $D20F	  ;SKCTL
03350			 STA $D20A	  ;SKRES
03360			 LDA #$28
03370			 STA $D208	  ;AUDCTL
03380			 LDA #$A8
03390			 STA $D207	  ;AUDC4
03400			 LDA #$F8
03410			 STA $D20E	  ;IRQEN
03420			 RTS
03430 C3F		.HX 3F40
03440			 .DA $0001
03450			 .DA $0001
03460			 .DA $0001
03470 LWTBL	 .BL 8,0
03480 USIOE
03490 ABSTBL	.DA DLWTBLL+1,REL01+1,REL02+1,REL03+1,REL04+1,REL05+1,REL06+1
03500			 .DA REL07+1,REL08+1,REL09+1,REL10+1,REL11+1,REL12+1,REL13+1
03510			 .DA REL14+1,REL15+1,GE1+1,REL16+1,REL17+1,REL18+1,REL19+1
03520			 .DA REL20+1,STOUT+1,STOU2+1,ERRABS,REL21+1,EABS3+1
}}}