; ; File: MC-1200_2716_U15_MFM_6-29-82_10_Sector.bin ; ; Size: 2048 bytes ; Checksum: 4987 ; CRC-32: 40B0AF66 ; ; Date: Sat Sep 01 18:14:14 2018 ; ; CPU: MOS Technology 6502 (MCS6500 family) ; ; 0000 - f7ff RAM ; f800 - f87f 128 bytes expansion bus ; f880 - f897 24 bytes system I/O ; f898 - ffff 1896 bytes ROM ; ; logical memory map ; ; 0000 - 005f zero page memory reserved for sbios use ; 0060 - 007f reserved for use by 6502 assembled routines in ram ; 0080 - 00ff zero page memory used by operating system ; 0100 - 01ff 6502 stack ; 0200 address of p-System Interpreter ; 0200 - f7f9 ram dedicated to p-System ; f7fa 6502 NMI vector points to this location ; f7fd 6502 IRQ vector points to this location ; f898 address of ROM-based sbios ; fffa 6502 NMI jump vector ; fffc 6502 Reset jump vector (point to ROM bootstrap) ; fffe 6502 IRQ jump vector ; ; I/O address constants: ; PIA = $F884 ; ACIA2 = $F882 ; DPIA = $F88C ; SSDA = $F890 ; ACIA = $F880 ; TIMER0 = $F888 ; TIMER1 = $F889 ; TIMER2 = $F88A ; TIMER = $F88B ; ; Numeric constants: ; ; SYNC = $B1 ; SSDA sync char ; HIPAGE = $F7 ; Highest page of RAM ; TRAKS = 160 ; Tracks per disk ; SECTR = 10 ; Sectors per Tracks ; STEPRT = 5 ; Stepper rate (ms) ; HDSETL = 15 ; Head settle time (ms) ; MTRSTR = 1000 ; Motor start time (ms) ; ; Address constants: ; AFLAG = $2A ; Motor A timeout flag ; BFLAG = $2B ; Motor B timeout flag ; ATMOUT = $22 ; BTMOUT = $26 ; MTIME = $10 ; TRACK = $3E ; CURDSK = $40 ; CURTRK = $41 ; CURSCT = $42 ; CURBFR = $43 ; TOGGLE = $53 ; ; Monitor commands: ; ; A - Turns on drive A motor and designates drive A as the current drive ; B - Turns on drive B motor and designates drive B as the current drive ; S - Selects designated drive ; D - Deselects designated drive ; H - Homes drive head to track zero ; O - Steps drive head one step out (toward track zero) ; I - Steps drive head one step in (away from track zero) ; P - Prints a '*' for each index pulse when this key is held down (auto-repeat assumed) ; W - Disk write protected? (Y or N) ; M - Performs a thorough memory test. The test takes about 8.5 minutes, then recycles ; printing a '*' on the terminal for each cycle. If an error occurs, a hexadecimal ; error pattern and address will be displayed on the console. ; E - Exits test mode (same effect as pressing the reset switch) ; org $F800 F800 .BYT 'Copyright (C) 1982 ' .BYT 'Milwaukee Computers, Inc.' .BYT 0D,0A,'16235 W Ryerson Rd.' .BYT 0D,0A,'New Berlin, WI 53151' .BYT 0D,0A,'414-784-2312' F865 : 0D 0A 00 ; F868 : FF FF FF FF db $FF, $FF, $FF, $FF ... F895 : FF FF FF FF db $FF, $FF, $FF, $FF ; ; Visble PROM starts here ; F898 : 4C EC F8 SBIOS: jmp SYSINT ; F8EC F89B : 6C FC FF SYSHLT: jmp (XFFFC) ; 6502 RESET F89E : 4C 6B F9 jmp CONINT F8A1 : 4C 75 F9 jmp CONSTA F8A4 : 4C 85 F9 jmp CONREA F8A7 : 4C 99 F9 jmp CONWRT F8AA : 4C AD F9 jmp SETDSK ; F8AD SETTRK: F8AD : 85 41 sta CURTRK ; 0041 F8AF : 60 rts ; F8B0 SETSCT: F8B0 : 85 42 sta CURSCT ; 0042 F8B2 : 60 rts F8B3 : 4C BE F9 jmp SETBFR ; F9BE F8B6 : 4C C5 F9 jmp DSKREA ; F9C5 F8B9 : 4C 35 FA jmp DSKWRT ; FA35 F8BC : 4C 1F FB jmp DSKINT ; FB1F F8BF : 4C 7E FB jmp DSKSTR ; FB7E F8C2 : 4C B8 FB jmp DSKSTP ; FBB8 F8C5 : 4C E9 FB jmp PRNSTA ; FBE9 F8C8 : 4C E9 FB jmp PRNSTA ; FBE9 ; F8CB : A2 09 PRNREA ldx #$09 F8CD : 60 rts F8CE : 4C F6 FB jmp PRNWRT ; FBF6 F8D1 : 4C 11 FC jmp REMINT ; FC11 F8D4 : 4C 1B FC jmp REMSTA ; FC1B F8D7 : 4C 28 FC jmp REMREA ; FC28 F8DA : 4C 34 FC jmp REMWRT ; FC34 ; F8DD : A2 09 ldx #$09 F8DF : 60 rts ; F8E0 : A2 09 ldx #$09 F8E2 : 60 rts ; F8E3 : A2 09 ldx #$09 F8E5 : 60 rts ; F8E6 : A2 09 ldx #$09 F8E8 : 60 rts F8E9 : 4C 27 FD jmp CLKREA ; F8EC SYSINT: ; Configure 8253 timer F8EC : D8 cld F8ED : A9 74 lda #$74 F8EF : 8D 8B F8 sta TIMER ; F88B F8F2 : A9 B4 lda #$B4 F8F4 : 8D 8B F8 sta TIMER ; F88B F8F7 : A9 0D lda #$0D F8F9 : 8D 8A F8 sta TIMER2 ; F88A F8FC : A9 80 lda #$80 F8FE : 8D 8A F8 sta TIMER2 ; F88A F901 : A9 02 lda #$02 F903 : 8D 89 F8 sta TIMER1 ; F889 F906 : A9 00 lda #$00 F908 : 8D 89 F8 sta TIMER1 ; F889 F90B : A2 28 ldx #$28 ; 40 F90D : 86 1B stx X001B F90F TWOSEC: F90F : A0 7D ldy #$7D ; 125 F911 : 20 5F FE jsr DELAY F914 : C6 1B dec X001B F916 : D0 F7 bne TWOSEC ; Initialize disk PIA F918 : A0 00 ldy #$00 F91A : 98 tya F91B : 20 AD F9 jsr SETDSK ; F9AD F91E : 8C 8D F8 sty DPIA+1 ; Select DDRA F88D F921 : A2 44 ldx #$44 F923 : 8E 8C F8 stx DPIA ; F88C F926 : A9 04 lda #$04 F928 : 8D 8D F8 sta DPIA+1 ; Select PA F88D F92B : 8E 8C F8 stx DPIA ; VCO off, drive=A F88C F92E : 8C 8F F8 sty DPIA+3 ; Select DDRB F88F F931 : 88 dey F932 : 8C 8E F8 sty DPIA+2 ; All outputs F88E F935 : 8D 8F F8 sta DPIA+3 ; Select PB F88F F938 : A0 00 ldy #$00 F93A : 8C 8E F8 sty DPIA+2 ; MFM (dbl density) F88E F93D : A2 00 ldx #$00 F93F : 8E 89 F8 stx TIMER1 ; F889 F942 : A9 80 lda #$80 F944 : 8D 89 F8 sta TIMER1 ; F889 F947 : 8E 85 F8 stx PIA+1 ; F885 F94A : A9 E0 lda #$E0 F94C : 8D 84 F8 sta PIA ; F884 F94F : A0 04 ldy #$04 F951 : 8C 85 F8 sty PIA+1 ; Select PA F885 F954 : A9 C0 lda #$C0 F956 : 8D 84 F8 sta PIA ; PRIME F884 F959 : A9 40 lda #$40 F95B : 8D 84 F8 sta PIA ; F884 F95E : 8E 87 F8 stx PIA+3 ; Select DDRB F887 F961 : CA dex F962 : 8E 86 F8 stx PIA+2 ; All outputs F886 F965 : 8C 87 F8 sty PIA+3 ; Select PB F887 F968 : 20 11 FC jsr REMINT ; FC11 F96B CONINT: F96B : A9 03 lda #$03 F96D : 8D 80 F8 sta ACIA ; ACIA reset F880 F970 : A9 B5 lda #$B5 ; 8 bits, 1 stop, /16 F972 : 8D 80 F8 sta ACIA ; F880 F975 CONSTA: F975 : 20 C7 FC jsr MTRCHK ; FCC7 F978 : A2 00 ldx #$00 F97A : A0 00 ldy #$00 F97C : AD 80 F8 lda ACIA ; F880 F97F : 4A lsr a ; RDRF? F980 : 90 01 bcc NOCHAR ; F983 F982 : 88 dey F983 NOCHAR: F983 : 98 tya F984 : 60 rts ; F985 CONREA: F985 : A2 00 ldx #$00 F987 INCON: F987 : 20 C7 FC jsr MTRCHK ; FCC7 F98A : AD 80 F8 lda ACIA ; F880 F98D : 4A lsr a F98E : 90 F7 bcc INCON ; F987 F990 : AD 81 F8 lda ACIA+1 ; F881 F993 : 60 rts ; F994 OUTCON: F994 : 85 1A sta X001A F996 : 4C A0 F9 jmp OUTCON ; F9A0 ; F999 CONWRT: F999 : A2 00 ldx #$00 F99B : 85 1A sta X001A F99D : 20 C7 FC jsr MTRCHK ; FCC7 F9A0 OUT: F9A0 : A9 02 lda #$02 F9A2 : 2C 80 F8 bit ACIA ; F880 F9A5 : F0 F9 beq OUT ; F9A0 F9A7 : A5 1A lda X001A F9A9 : 8D 81 F8 sta ACIA+1 ; F881 F9AC : 60 rts ; F9AD SETDSK: F9AD : 45 53 eor TOGGLE ; 0053 F9AF : 85 40 NOTAB: sta CURDSK ; 0040 F9B1 : 49 FF eor #$FF F9B3 : 29 01 and #$01 F9B5 : 6A ror a F9B6 : 6A ror a F9B7 : 6A ror a F9B8 : 09 04 ora #$04 F9BA : 8D 8C F8 sta DPIA ; F88C F9BD : 60 rts ; F9BE SETBFR: F9BE : 85 43 sta CURBFR ; 0043 F9C0 : 86 44 stx CURBFR+1 ; 0044 F9C2 : 86 45 stx CURBFR+2 ; 0045 F9C4 : 60 rts ; F9C5 DSKREA: F9C5 : 20 14 FB jsr VALID ; Is CURDSK valid? FB14 F9C8 : 20 43 FC jsr SEEK ; Move head to CURTRK FC43 F9CB READIP: F9CB : AD 8C F8 lda DPIA ; F88C F9CE : 10 FB bpl READIP ; F9CB F9D0 : A6 42 ldx CURSCT ; 0042 F9D2 : 86 00 stx X0000 F9D4 READ2W: F9D4 : 20 CE FA jsr SECID ; FACE F9D7 : 8A txa F9D8 : D0 41 bne ERR ; FA1B F9DA : A0 01 ldy #$01 F9DC : 20 5F FE jsr DELAY ; .2 ms delay FE5F F9DF : A9 FB lda #$FB F9E1 : 2D 8C F8 and DPIA ; F88C F9E4 : 8D 8C F8 sta DPIA ; (Enable VCO) F88C F9E7 : A9 8B lda #$8B F9E9 : 8D 90 F8 sta SSDA ; Clear SSDA sync, Rx F890 F9EC : A9 82 lda #$82 F9EE : 8D 90 F8 sta SSDA ; Enable SSDA sync, Rx F890 F9F1 : A0 00 ldy #$00 F9F3 : A2 02 ldx #$02 F9F5 : 86 01 stx X0001 F9F7 DISKIN: F9F7 : AD 8C F8 lda DPIA ; F88C F9FA : 10 1F bpl ERR ; FA1B F9FC : AD 90 F8 lda SSDA ; F890 F9FF : 4A lsr a ; RDA? FA00 : 90 F5 bcc DISKIN ; No. Keep checking. F9F7 FA02 : AD 91 F8 lda SSDA+1 ; Read 2 bytes at a time F891 FA05 : 91 43 sta (CURBFR),y ; 0043 FA07 : C8 iny FA08 : A2 00 ldx #$00 FA0A : AD 91 F8 lda SSDA+1 ; F891 FA0D : 91 43 sta (CURBFR),y ; 0043 FA0F : C8 iny FA10 : D0 E5 bne DISKIN ; F9F7 FA12 : C6 01 dec X0001 FA14 : F0 09 beq OFFVCO ; FA1F FA16 : E6 44 inc CURBFR+1 ; 0044 FA18 : 4C F7 F9 jmp DISKIN ; F9F7 ; FA1B ERR: FA1B : A2 01 ldx #$01 ; Read error status FA1D : 86 00 stx X0000 FA1F OFFVCO: FA1F : A9 04 lda #$04 FA21 : 0D 8C F8 ora DPIA ; F88C FA24 : 8D 8C F8 sta DPIA ; (VCO off) F88C FA27 : C6 44 dec CURBFR+1 ; 0044 FA29 : C6 00 dec X0000 FA2B : D0 A7 bne READ2W ; F9D4 FA2D : A5 45 lda CURBFR+2 ; 0045 FA2F : 85 44 sta CURBFR+1 ; 0044 FA31 : 60 rts ; FA32 WRERR: FA32 : A2 10 ldx #$10 FA34 : 60 rts ; FA35 DSKWRT: FA35 : 20 14 FB jsr VALID ; Is CURDSK valid? FB14 FA38 : 20 43 FC jsr SEEK ; Move head to CURTRK FC43 FA3B : AD 8C F8 lda DPIA ; F88C FA3E : 29 20 and #$20 FA40 : F0 F0 beq WRERR ; Write protect? FA32 FA42 WRTIP: FA42 : AD 8C F8 lda DPIA ; Check for index pulse F88C FA45 : 10 FB bpl WRTIP ; FA42 FA47 : A6 42 ldx CURSCT ; 0042 FA49 : CA dex FA4A : F0 0C beq WRITE ; FA58 FA4C : A9 FD lda #$FD FA4E : 85 44 sta CURBFR+1 ; Change buffer to $FDXX 0044 FA50 : 86 00 stx X0000 ; Set sector count FA52 : 20 D4 F9 jsr READ2W ; Get to sector #CURSCT F9D4 FA55 : 8A txa FA56 : D0 DA bne WRERR ; FA32 FA58 WRITE: FA58 : 20 CE FA jsr SECTID ; FACE FA5B : 8A txa FA5C : D0 D4 bne WRERR ; FA32 FA5E : A9 8B lda #$8B FA60 : 8D 90 F8 sta SSDA ; Reset SSDA Tx F890 FA63 : A9 00 lda #$00 FA65 : 8D 91 F8 sta SSDA+1 ; F891 FA68 : A9 C1 lda #$C1 FA6A : 8D 90 F8 sta SSDA ; Select SSDA Tx Data FIFO F890 FA6D : A9 01 lda #$01 FA6F : 0D 8E F8 ora DPIA+2 ; F88E FA72 : 8D 8E F8 sta DPIA+2 ; Write Enable F88E FA75 : A0 02 ldy #$02 FA77 : 20 5F FE jsr DELAY ; .4 ms delay FE5F FA7A : A9 02 lda #$02 FA7C SCTDRA: FA7C : 2C 90 F8 bit SSDA ; TDRA? F890 FA7F : F0 FB beq SCTDRA ; FA7C FA81 : A9 B1 lda #sync ; $B1 FA83 : 8D 91 F8 sta SSDA+1 ; F891 FA86 : 8D 91 F8 sta SSDA+1 ; (2 sync chars out) F891 FA89 : A0 00 ldy #$00 FA8B : A2 02 ldx #$02 FA8D DSKOUT: FA8D : A9 02 lda #$02 FA8F TRDA: FA8F : 2C 90 F8 bit SSDA ; TRDA? F890 FA92 : F0 FB beq TRDA ; FA8F FA94 : B1 43 lda (CURBFR),y ; 0043 FA96 : 8D 91 F8 sta SSDA+1 ; F891 FA99 : C8 iny FA9A : B1 43 lda (CURBFR),y ; 0043 FA9C : 8D 91 F8 sta SSDA+1 ; F891 FA9F : C8 iny FAA0 : D0 EB bne DSKOUT ; FA8D FAA2 : CA dex FAA3 : F0 05 beq FINWRT ; FAAA FAA5 : E6 44 inc CURBFR+1 ; 0044 FAA7 : 4C 8D FA jmp DSKOUT ; FA8D ; FAAA FINWRT: FAAA : C8 iny FAAB : 20 5F FE jsr DELAY ; FE5F FAAE : 20 FA FD jsr DLY30 ; FDFA FAB1 : 20 FA FD jsr DLY30 ; FDFA FAB4 : 20 F6 FD jsr DLY20 ; FDF6 FAB7 : A9 FE lda #$FE FAB9 : 2D 8E F8 and DPIA+2 ; F88E FABC : 8D 8E F8 sta DPIA+2 ; Write enable off F88E FABF : A9 8B lda #$8B FAC1 : 8D 90 F8 sta SSDA ; Inhibit SSDA Tx F890 FAC4 : A9 B1 lda #SYNC ; SSDA sync char B1 FAC6 : 8D 91 F8 sta SSDA+1 ; F891 FAC9 : A5 45 lda CURBFR+2 ; 0045 FACB : 85 44 sta CURBFR+1 ; 0044 FACD : 60 rts ; FACE SECTID: FACE : A0 03 ldy #$03 FAD0 : 20 5F FE jsr DELAY ; FE5F FAD3 : A9 FB lda #$FB FAD5 : 2D 8C F8 and DPIA ; F88C FAD8 : 8D 8C F8 sta DPIA ; Enable VCO F88C FADB : 20 FA FD jsr DLY30 ; FDFA FADE : 20 FA FD jsr DLY30 ; FDFA FAE1 : A9 8B lda #$8B FAE3 : 8D 90 F8 sta SSDA ; Clear SSDA Sync, Rx F890 FAE6 : A9 82 lda #$82 FAE8 : 8D 90 F8 sta SSDA ; Enable SSDA Sync, Rx F890 FAEB READID: FAEB : AD 8C F8 lda DPIA ; F88C FAEE : 10 20 bpl IDERR ; FB10 FAF0 : AD 90 F8 lda SSDA ; F890 FAF3 : 4A lsr a FAF4 : 90 F5 bcc READID ; FAEB FAF6 : AD 91 F8 lda SSDA+1 ; F891 FAF9 : AC 91 F8 ldy SSDA+1 ; F891 FAFC : C5 41 cmp CURTRK ; 0041 FAFE : D0 10 bne IDERR ; FB10 FB00 : A2 00 ldx #$00 FB02 IDOFFV: FB02 : A9 04 lda #$04 FB04 : 0D 8C F8 ora DPIA ; F88C FB07 : 8D 8C F8 sta DPIA ; F88C FB0A : A9 8B lda #$8B FB0C : 8D 90 F8 sta SSDA ; F890 FB0F : 60 rts ; FB10 IDERR: FB10 : A2 09 ldx #$09 FB12 : D0 EE bne IDOFFV ; FB02 FB14 VALID: FB14 : A5 40 lda CURDSK ; 0040 FB16 : C9 02 cmp #$02 ; Is CURDSK > 1 ? FB18 : 30 04 bmi VALDSK ; FB1E FB1A INVAL: FB1A : 68 pla FB1B : 68 pla ; Remove sub addr from stack FB1C : A2 09 ldx #$09 FB1E VALDSK: FB1E : 60 rts ; FB1F DSKINT: FB1F : 20 14 FB jsr VALID ; FB14 FB22 : A9 03 lda #$03 FB24 : 8D 90 F8 sta SSDA ; SSDA reset, select C2 F890 FB27 : A9 58 lda #$58 FB29 : 8D 91 F8 sta SSDA+1 ; 8 bits, 2 byte transfer F891 FB2C : A9 43 lda #$43 FB2E : 8D 90 F8 sta SSDA ; Select C3 F890 FB31 : A9 0C lda #$0C FB33 : 8D 91 F8 sta SSDA+1 ; 2 sync chars. F891 FB36 : A9 8B lda #$8B FB38 : 8D 90 F8 sta SSDA ; select sync code register F890 FB3B : A9 B1 lda #SYNC ; SSDA Sync char $B1 FB3D : 8D 91 F8 sta SSDA+1 ; F891 FB40 : A5 40 lda CURDSK ; 0040 FB42 : 29 01 and #$01 FB44 : A8 tay FB45 : A9 00 lda #$00 FB47 : 99 3E 00 sta TRACK,y ;TRACK=Zero (Y=drive#) 003E FB4A : 20 51 FB jsr HOME ; FB51 FB4D : 20 99 FC jsr DSKRDY ; FC99 FB50 : 60 rts ; FB51 HOME: FB51 : A9 04 lda #$04 FB53 : 0D 8E F8 ora DPIA+2 ; F88E FB56 : 8D 8E F8 sta DPIA+2 ; Step direction = in F88E FB59 : 20 50 FE jsr Step ; Take one step in FE50 FB5C : A0 58 ldy #$58 ; 88 FB5E : 84 1C sty X001C FB60 : A9 FB lda #$FB FB62 : 2D 8E F8 and DPIA+2 ; F88E FB65 : 8D 8E F8 sta DPIA+2 ; Step direction = in F88E FB68 NXTSTEP: FB68 : 20 79 FB jsr WAIT ; FB79 FB6B : A9 02 lda #$02 FB6D : 2C 8C F8 bit DPIA ; Track zero? F88C FB70 : F0 07 beq WAIT ; FB79 FB72 : 20 50 FE jsr STEP ; Step Out FE50 FB75 : C6 1C dec X001C FB77 : D0 EF bne NXSTEP ; FB68 FB79 WAIT: FB79 : A0 1E ldy #$1E ; 6 ms DELAY 30 FB7B : 4C 5F FE jmp DELAY ; FE5F ; FB7E DSKSTR: FB7E : 20 14 FB jsr VALID ; FB14 FB81 : A5 40 lda CURDSK ; 0040 FB83 : D0 0C bne STARTB ; FB91 FB85 : 85 5C sta AFLAG ; 005C FB87 : A9 40 lda #$40 FB89 : 2C 8E F8 bit DPIA+2 ; F88E FB8C : F0 0E beq START ; FB9C FB8E : 4C AF FB jmp SELECT ; FBAF ; FB91 STARTB: FB91 : A9 00 lda #$00 FB93 : 85 5D sta BFLAG ; 005D FB95 : A9 80 lda #$80 FB97 : 2C 8E F8 bit DPIA+2 ; F88E FB9A : D0 13 bne SELECT ; FBAF FB9C START: FB9C : 0D 8E F8 ora DPIA+2 ; F88E FB9F : 8D 8E F8 sta DPIA+2F88E FBA2 : A9 0A lda #MTRSTR/50 ; Motor start delay $0A FBA4 : 85 1B sta X001B FBA6 MOTRON: FBA6 : A0 FA ldy #$FA FBA8 : 20 5F FE jsr DELAY ; FE5F FBAB : C6 1B dec X001B FBAD : D0 F7 bne MOTRON ; FBA6 FBAF SELECT: FBAF : A9 20 lda #$20 ; Select FBB1 : 0D 8E F8 ora DPIA+2 ; F88E FBB4 : 8D 8E F8 sta DPIA+2 ; F88E FBB7 : 60 rts ; FBB8 DSKSTP: FBB8 : A9 DF lda #$DF ; Deselect FBBA : 2D 8E F8 and DPIA+2 ; F88E FBBD : 8D 8E F8 sta DPIA+2 ; F88E FBC0 : 20 27 FD jsr CLKREA FBC3 : A5 40 lda CURDSK ; 0040 FBC5 : D0 06 bne TIMEB ; FBCD FBC7 : A2 03 ldx #$03 FBC9 : 86 5C stx AFLAG ; 005C FBCB : D0 04 bne GETCLK ; FBD1 FBCD TIMEB: FBCD : A2 07 ldx #$07 FBCF : 86 5D stx BFLAG ; 005D FBD1 GETCLK: FBD1 : A0 01 ldy #$01 FBD3 : 68 pla FBD4 : 69 68 adc #$68 FBD6 : 95 54 sta ATMOUT,x ; 0054 FBD8 : CA dex FBD9 : 68 pla FBDA : 69 01 adc #$01 FBDC : 95 54 sta ATMOUT,x ; 0054 FBDE : CA dex FBDF CLKBYT: FBDF : 68 pla FBE0 : 69 00 adc #$00 FBE2 : 95 54 sta ATMOUT,x ; 0054 FBE4 : CA dex FBE5 : 88 dey FBE6 : 10 F7 bpl CLKBYT ; FBDF FBE8 : 60 rts ; FBE9 PRNSTA: FBE9 : A2 00 ldx #$00 FBEB : AD 84 F8 lda PIA ; F884 FBEE : 4A lsr a FBEF : 90 02 bcc PREADY ; FBF3 FBF1 : A2 09 ldx #$09 FBF3 PREADY: FBF3 : A9 00 lda #$00 FBF5 : 60 rts ; FBF6 PRNWRT: FBF6 : 48 pha FBF7 BUSY: FBF7 : AD 84 F8 lda PIA ; F884 FBFA : 4A lsr a FBFB : B0 FA bcs BUSY ; FBF7 FBFD : 68 pla FBFE : 8D 86 F8 sta PIA+2 ; F886 FC01 : A9 00 lda #$00 FC03 : 8D 84 F8 sta PIA ; F884 FC06 : 20 69 FE jsr NULL ; FE69 FC09 : A9 40 lda #$40 FC0B : 8D 84 F8 sta PIA ; F884 FC0E : A2 00 ldx #$00 FC10 : 60 rts ; FC11 REMINT: FC11 : A9 03 lda #$03 FC13 : 8D 82 F8 sta ACIA2 ; F882 FC16 : A9 B5 lda #$B5 ; 8 bits, 1 stop, /16 FC18 : 8D 82 F8 sta ACIA2 ; F882 FC1B REMSTA: FC1B : A2 00 ldx #$00 FC1D : A0 00 ldy #$00 FC1F : AD 82 F8 lda ACIA2 ; F882 FC22 : 4A lsr a FC23 : 90 01 bcc NOCHR2 ; FC26 FC25 : 88 dey FC26 NOCHR2: FC26 : 98 tya FC27 : 60 rts ; FC28 REMREA: FC28 : A2 00 ldx #$00 FC2A REMIN: FC2A : AD 82 F8 lda ACIA2 ; F882 FC2D : 4A lsr a FC2E : 90 FA bcc REMIN ; FC2A FC30 : AD 83 F8 lda ACIA2+1 ; F883 FC33 : 60 rts ; FC34 REMWRT: FC34 : A2 00 ldx #$00 FC36 REMOUT: FC36 : 48 pha FC37 OUTREM: FC37 : A9 02 lda #$02 FC39 : 2C 82 F8 bit ACIA2 ; F882 FC3C : F0 F9 beq OUTREM ; FC37 FC3E : 68 pla FC3F : 8D 83 F8 sta ACIA2+1 ; F883 FC42 : 60 rts ; FC43 SEEK: FC43 : A9 EF lda #$EF FC45 : 2D 8E F8 and DPIA+2 ; F88E FC48 : 8D 8E F8 sta DPIA+2 ; Top side F88E FC4B : A4 40 ldy CURDSK ; 0040 FC4D : A5 41 lda CURTRK ; 0041 FC4F : C9 50 cmp #$50 ; 80 FC51 : 30 0D bmi SIDE ; FC60 FC53 : 38 sec FC54 : E9 50 sbc #$50 ; 80 FC56 : AA tax FC57 : A9 10 lda #$10 FC59 : 0D 8E F8 ora DPIA+2 ; F88E FC5C : 8D 8E F8 sta DPIA+2 ; Bottom side F88E FC5F : 8A txa FC60 SIDE: FC60 : 48 pha ; Save physical track # FC61 : 38 sec FC62 : F9 3E 00 sbc TRACK,y ; Calculate track offset 003E FC65 : 85 15 sta X0015 FC67 : F0 22 beq NOSTEP ; FC8B FC69 : 10 11 bpl STEPIN ; FC7C FC6B : 38 sec FC6C : A9 00 lda #$00 FC6E : E5 15 sbc X0015 FC70 : 85 15 sta X0015 FC72 : A9 FB lda #$FB FC74 : 2D 8E F8 and DPIA+2 ; F88E FC77 : 8D 8E F8 sta DPIA+2 ; F88E FC7A : D0 08 bne ALIGN ; (Branch always) FC84 FC7C STEPIN: FC7C : A9 04 lda #$04 FC7E : 0D 8E F8 ora DPIA+2 ; F88E FC81 : 8D 8E F8 sta DPIA+2 ; F88E FC84 ALIGN: FC84 : 20 50 FE jsr STEP ; FE50 FC87 : C6 15 dec X0015 FC89 : D0 F9 bne ALIGN ; FC84 FC8B NOSTEP: FC8B : A5 40 lda CURDSK ; 0040 FC8D : 29 01 and #$01 FC8F : A8 tay FC90 : 68 pla ; Get physical track # FC91 : 99 3E 00 sta TRACK,y ; 003E FC94 : A0 4B ldy #HDSETL*5 ; $4B FC96 : 20 5F FE jsr DELAY ; Head settle delay FE5F ; ; This routine checks for a floppy in CURDSK ; by looking for a transistion on INDEX ; FC99 DSKRDY: FC99 : A2 FF ldx #$FF FC9B : 86 51 stx X0051 FC9D : A2 05 ldx #$05 FC9F : 86 52 stx X0052 FCA1 : AD 8C F8 lda DPIA ; F88C FCA4 : 29 80 and #$80 FCA6 : 85 50 sta X0050 ; Save state of INDEX FCA8 DISKLK: FCA8 : AD 8C F8 lda DPIA ; F88C FCAB : 29 80 and #$80 FCAD : C5 50 cmp X0050 ; Any change? FCAF : D0 10 bne DETECT ; FCC1 FCB1 : A0 01 ldy #$01 FCB3 : 20 5F FE jsr DELAY ; .2 ms FE5F FCB6 : C6 51 dec X0051 FCB8 : D0 EE bne DISKLK ; FCA8 FCBA : C6 52 dec X0052 FCBC : D0 EA bne DISKLK ; Wait 1/2 sec to give up FCA8 FCBE : 4C 1A FB jmp INVAL ; No disk in drive FB1A ; FCC1 DETECT: FCC1 : AD 8C F8 lda DPIAF88C FCC4 : 30 FB bmi DETECT ; Wait for index hole FCC1 FCC6 : 60 rts ; FCC7 MTRCHK: FCC7 : 48 pha FCC8 : 98 tya FCC9 : 48 pha FCCA : 8A txa FCCB : 48 pha FCCC : AD 8E F8 lda DPIA+2 ; F88E FCCF : 29 C0 and #$C0 FCD1 : F0 47 beq NMTRON ; FD1A FCD3 : 20 27 FD jsr CLKREA FCD6 : A2 03 ldx #$03 FCD8 CKLOOP: FCD8 : 68 pla FCD9 : 95 10 sta MTIME,x ; 0010 FCDB : CA dex FCDC : 10 FA bpl CKLOOP ; FCD8 FCDE : A6 5D ldx BFLAG ; 005D FCE0 : F0 1E beq CHECKA ; FD00 FCE2 : A2 00 ldx #$00 FCE4 NEXTMB: FCE4 : B5 58 lda BTIMOUT,x ; 0058 FCE6 : D5 10 cmp MTIME,x ; 0010 FCE8 : F0 11 beq COMPMB ; FCFB FCEA : B0 14 bcs CHECKA ; FD00 FCEC STOPB: FCEC : A9 7F lda #$7F FCEE : 2D 8E F8 and DPIA+2 ; F88E FCF1 : 8D 8E F8 sta DPIA+2 ; F88E FCF4 : A9 00 lda #$00 FCF6 : 85 5D sta BFLAG ; 005D FCF8 : 4C 00 FD jmp CHECKA ; FD00 ; FCFB COMPMB: FCFB : E8 inx FCFC : E0 04 cpx #$04 FCFE : D0 E4 bne NEXTMB ; FCE4 FD00 CHECKA: FD00 : A6 5C ldx AFLAG ; 005C FD02 : F0 16 beq NMTRON ; FD1A FD04 : A2 00 ldx #$00 FD06 NEXTMA: FD06 : B5 54 lda ATMOUT,x ; 0054 FD08 : D5 10 cmp MTIME,x ; 0010 FD0A : F0 14 beq COMPMA ; FD20 FD0C : B0 0C bcs MTRON ; FD1A FD0E STOPA: FD0E : A9 BF lda #$BF FD10 : 2D 8E F8 and DPIA+2 ; F88E FD13 : 8D 8E F8 sta DPIA+2 ; F88E FD16 : A9 00 lda #$00 FD18 : 85 5C sta AFLAG ; 005C FD1A NMTRON: FD1A : 68 pla FD1B : AA tax FD1C : 68 pla FD1D : A8 tay FD1E : 68 pla FD1F : 60 rts ; FD20 COMPMA: FD20 : E8 inx FD21 : E0 04 cpx #$04 FD23 : D0 E1 bne NEXTMA ; FD06 FD25 : F0 F3 beq NMTRON ; FD1A FD27 CLKREA: FD27 : 68 pla FD28 : 85 02 sta X0002 FD2A : 68 pla FD2B : 85 03 sta X0003 FD2D : A9 40 lda #$40 FD2F : 8D 8B F8 sta TIMER ; Latch timer #1 F88B FD32 : AD 89 F8 lda TIMER1 ; LSBY1 F889 FD35 : 38 sec FD36 : E9 01 sbc #$01 FD38 : AA tax FD39 : AD 89 F8 lda TIMER1 ; MSBY1 F889 FD3C : E9 00 sbc #$00 FD3E : 29 7F and #$7F FD40 : 85 05 sta X0005 FD42 : A9 80 lda #$80 FD44 : 8D 8B F8 sta TIMER ; F88B FD47 : AD 8A F8 lda TIMER2 ; LSBY2 F88A FD4A : 85 06 sta X0006 FD4C : AD 8A F8 lda TIMER2 ; MSBY2 F88A FD4F : 4A lsr a FD50 : 85 07 sta X0007 FD52 : 66 06 ror X0006 FD54 : 6A ror a FD55 : 29 80 and #$80 FD57 : 05 05 ora X0005 ; M1 FD59 : A8 tay FD5A : A5 07 lda X0007 ; M2 FD5C : 49 FF eor #$FF FD5E : 29 3F and #$3F FD60 : 48 pha FD61 : A5 06 lda X0006 ; L2 FD63 : 49 FF eor #$FF FD65 : 48 pha FD66 : 98 tya ; M1 FD67 : 49 FF eor #$FF FD69 : 48 pha FD6A : 8A txa ; L1 FD6B : 49 FF eor #$FF FD6D : 48 pha FD6E : A5 03 lda X0003 FD70 : 48 pha FD71 : A5 02 lda X0002 FD73 : 48 pha FD74 : A2 00 ldx #$00 ; Clock status FD76 RETRN: FD76 : 60 rts ; FD77 ROM1: FD77 : A2 FF ldx #$FF FD79 : 9A txs FD7A : 20 EC F8 jsr SYSINT ; F8EC FD7D : A2 00 ldx #$00 FD7F : 86 5C stx AFLAG ; 005C FD81 : 86 5D stx BFLAG ; 005D FD83 MENU: FD83 : BD 02 FE lda XFE02,x FD86 : F0 06 beq BOOTUP ; FD8E FD88 : 20 94 F9 jsr OUTCON ; F994 FD8B : E8 inx FD8C : D0 F5 bne MENU ; FD83 FD8E BOOTUP: FD8E : A9 00 lda #$00 FD90 : 85 53 sta TOGGLE ; 0053 FD92 : 20 BF FD jsr FBSUB ; FDBF FD95 : 8A txa FD96 : F0 0D beq LBOOT ; FDA5 FD98 : A9 01 lda #$01 FD9A : 85 53 sta TOGGLE ; 0053 FD9C : 20 BF FD jsr FBSUB ; FDBF FD9F : 8A txa FDA0 : F0 03 beq LBOOT ; FDA5 FDA2 : 4C 92 FE jmp TEST ; FE92 ; FDA5 LBOOT: FDA5 : A2 FF ldx #$FF FDA7 : 9A txs FDA8 : A0 19 ldy #$19 FDAA NXTPM: FDAA : B9 2C FE lda PARAMS,y ; FE2C FDAD : 48 pha FDAE : 88 dey FDAF : 10 F9 bpl NXTPM ; FDAA FDB1 : 4C 00 D2 jmp $D200 ; (Addr of sec bootstrap) ; FDB4 NODISK: FDB4 : A9 1F lda #$1F FDB6 : 2D 8E F8 and DPIA+2 ; F88E FDB9 : 8D 8E F8 sta DPIA+2 ; F88E FDBC : A2 09 ldx #$09 FDBE : 60 rts ; FDBF FBSUB: FDBF : A9 00 lda #$00 FDC1 : 20 AD F9 jsr SETDSK ; F9AD FDC4 : 20 7E FB jsr DSKSTR ; FB7E FDC7 : 20 1F FB jsr DSKINT ; FB1F FDCA : 8A txa FDCB : D0 E7 bne NODISK ; FDB4 FDCD : A2 D1 ldx #$D1 FDCF : A9 00 lda #$00 FDD1 : 20 BE F9 jsr SETBFR ; F9BE FDD4 : 20 AD F8 jsr SETTRK ; F8AD FDD7 : A9 01 lda #$01 FDD9 : 20 B0 F8 jsr SETSCT ; F8B0 FDDC LOAD: FDDC : 20 C5 F9 jsr DSKREA ; F9C5 FDDF : 8A txa FDE0 : D0 D2 bne NODISK ; FDB4 FDE2 : A6 44 ldx CURBFR+1 ; 0044 FDE4 : E8 inx FDE5 : E8 inx FDE6 : A5 43 lda CURBFR ; 0043 FDE8 : 20 BE F9 jsr SETBFR ; F9BE FDEB : E6 42 inc CURSCT ; 0042 FDED : A5 42 lda CURSCT ; 0042 FDEF : C9 0B cmp #SECTR+1 ; $0B FDF1 : D0 E9 bne LOAD ; FDDC FDF3 : A2 00 ldx #$00 FDF5 : 60 rts ; FDF6 DLY20: FDF6 : EA nop ; 20 us time delay FDF7 : 4C FF FD jmp DLY15 ; FDFF ; FDFA DLY30: FDFA : 20 69 FE jsr NULL ; 30 us time delay FE69 FDFD DLY18: FDFD : C0 00 cpy #$00 ; 18 us entry FDFF DLY15: FDFF : 4C 69 FE jmp NULL ; 15 us entry FE69 ; FE02 LIST: FE02 : 07 0D 0A 0D 0A .BYT 7,13,10,13,10 FE07 : .BYT 'Milwaukee Computers, Inc. ' .BYT 0 FE24 LIST2: .BYT '>Test ' FE2A : 07 00 .BYT 7,0 FE2C PARAMS: FE2C PARAMS: .WOR $0000, $0200, SBIOS, $0200 .WOR $F7F8, TRAKS, SECTR, $0200 .WOR $0001, $0001, $0000, SECTR, $0200 FE2C : 00 00 00 02 98 F8 00 02 FE34 : F8 F7 A0 00 0A 00 00 02 FE3C : 01 00 01 00 00 00 0A 00 00 02 FE46 CRLF: FE46 : A9 0D lda #$0D FE48 : 20 94 F9 jsr OUTCON ; F994 FE4B : A9 0A lda #$0A FE4D : 4C 94 F9 jmp OUTCON ; F994 ; FE50 STEP: FE50 : A9 08 lda #$08 FE52 : 0D 8E F8 ora DPIA+2 ; F88E FE55 : 8D 8E F8 sta DPIA+2 ; F88E FE58 : 29 F7 and #$F7 FE5A : 8D 8E F8 sta DPIA+2 ; F88E FE5D : A0 19 ldy #STEPRT*5 ; $19 FE5F DELAY: FE5F : A2 26 ldx #$26 FE61 TIME: FE61 : CA dex FE62 : D0 FD bne TIME ; FE61 FE64 : 55 FF eor X00FF,x FE66 : 88 dey FE67 : D0 F6 bne DELAY ; FE5F FE69 NULL: FE69 : 60 rts ; FE6A BY2HEX: FE6A : 48 pha FE6B : 4A lsr a FE6C : 4A lsr a FE6D : 4A lsr a FE6E : 4A lsr a FE6F : 20 75 FE jsr LFE75 FE72 : 68 pla FE73 : 29 0F and #$0F FE75 NYBBLE: FE75 : 18 clc FE76 : 69 30 adc #$30 FE78 : C9 3A cmp #$3A FE7A : 90 02 bcc NUM ; FE7E FE7C : 69 06 adc #$06 FE7E NUM: FE7E : 4C 94 F9 jmp OUTCON ; F994 ; FE81 ZERO: FE81 : A9 02 lda #$02 FE83 : 2C 8C F8 bit DPIA ; F88C FE86 : D0 E1 bne NULL ; FE69 FE88 : A9 08 lda #$08 FE8A : 20 94 F9 jsr OUTCON ; F994 FE8D : A9 5A "Z" lda #$5A FE8F : 4C 94 F9 jmp OUTCON ; F994 ; FE92 TEST: FE92 : A2 00 ldx #$00 FE94 OUTEST: FE94 : BD 24 FE lda LIST2,x ; FE24 FE97 : F0 06 beq CMD ; FE9F FE99 : 20 94 F9 jsr OUTCON ; F994 FE9C : E8 inx FE9D : D0 F5 bne OUTEST ; FE94 FE9F CMD: FE9F : 20 87 F9 jsr INCON ; F987 FEA2 : 29 5F and #$5F FEA4 : C9 41 "A" cmp #$41 FEA6 : D0 0D bne CONT1 ; FEB5 FEA8 : 20 94 F9 jsr OUTCON ; F994 FEAB : A9 44 lda #$44 FEAD : 8D 8E F8 sta DPIA+2 ; F88E FEB0 : 8D 8C F8 sta DPIA ; F88C FEB3 : D0 EA bne CMD ; FE9F FEB5 CONT1: FEB5 : C9 42 "B" cmp #$42 FEB7 : D0 0F bne CONT2 ; FEC8 FEB9 : 20 94 F9 jsr OUTCON ; F994 FEBC : A9 80 lda #$80 FEBE : 8D 8E F8 sta DPIA+2 ; F88E FEC1 : A9 04 lda #$04 FEC3 : 8D 8C F8 sta DPIA ; F88C FEC6 : D0 D7 bne CMD ; FE9F FEC8 CONT2: FEC8 : C9 53 "S" cmp #$53 FECA : D0 0D bne CONT3 ; FED9 FECC : 20 94 F9 jsr OUTCON ; F994 FECF : A9 20 lda #$20 FED1 : 0D 8E F8 ora DPIA+2 ; F88E FED4 : 8D 8E F8 sta DPIA+2 ; F88E FED7 : D0 C6 bne CMD ; FE9F FED9 CONT3: FED9 : C9 44 "D" cmp #$44 FEDB : D0 0E bne CONT4 ; FEEB FEDD : 20 94 F9 jsr OUTCON ; F994 FEE0 : A9 DF lda #$DF FEE2 : 2D 8E F8 and DPIA+2 ; F88E FEE5 : 8D 8E F8 sta DPIA+2 ; F88E FEE8 : 4C 9F FE jmp CMD ; FE9F ; FEEB CONT4: FEEB : C9 48 "H" cmp #$48 FEED : D0 0B bne CONT5 ; FEFA FEEF : 20 94 F9 jsr OUTCON ; F994 FEF2 : 20 51 FB jsr HOME ; FB51 FEF5 : 20 81 FE jsr ZERO ; FE81 FEF8 : D0 A5 bne CMD ; FE9F FEFA CONT5: FEFA : C9 4F "O" cmp #$4F FEFC : D0 14 bne CONT6 ; FF12 FEFE : 20 94 F9 jsr OUTCONF994 FF01 : A9 FB lda #$FB FF03 : 2D 8E F8 and DPIA+2 ; F88E FF06 INOUT: FF06 : 8D 8E F8 sta DPIA+2 ; F88E FF09 : 20 50 FE jsr STEP ; FE50 FF0C : 20 81 FE jsr ZERO ; FE81 BCMD: FF0F : 4C 9F FE jmp CMD ; FF12 CONT6: FF12 : C9 49 "I" cmp #$49 FF14 : D0 0A bne CONT7 ; FF20 FF16 : 20 94 F9 jsr CONOUT ; F994 FF19 : A9 04 lda #$04 FF1B : 0D 8E F8 ora DPIA+2 ; F88E FF1E : D0 E6 bne INOUT ; FF06 FF20 CONT7: FF20 : C9 50 "P" cmp #$50 FF22 : D0 12 bne CONT8 ; FF36 FF24 PULSE: FF24 : AD 8C F8 lda DPIA ; F88C FF27 : 30 FB bmi PULSE ; FF24 FF29 EDGE: FF29 : AD 8C F8 lda DPIA ; F88C FF2C : 10 FB bpl EDGE ; FF29 FF2E : A9 2A "*" lda #$2A FF30 : 20 94 F9 jsr OUTCON ; F994 FF33 : 4C 9F FE jmp CMD ; FE9F ; FF36 CONT8: FF36 : C9 57 "W" cmp #$57 FF38 : D0 13 bne CONT9 ; FF4D FF3A : AD 8C F8 lda DPIA ; F88C FF3D : 0A asl a FF3E : 0A asl a FF3F : 30 04 bmi NWP ; FF45 FF41 : A9 59 "Y" lda #$59 FF43 : D0 02 bne WPROT ; FF47 FF45 NWP: FF45 : A9 4E "N" lda #$4E FF47 WPROT: FF47 : 20 94 F9 jsr OUTCON ; F994 JPCMD: FF4A : 4C 9F FE jmp CMD ; FE9F ; FF4D CONT9: FF4D : C9 45 "E" cmp #$45 FF4F : D0 03 bne CONT10 ; FF54 FF51 : 6C FC FF jmp (XFFFC) ; FD77 ; FF54 CONT10: FF54 : C9 4D "M" cmp #$4D FF56 : F0 03 beq MEMTST ; FF5B FF58 : 4C 9F FE jmp LFE9F ; FF5B MEMTST: FF5B : 20 46 FE jsr CRLF ; FE46 FF5E MLOOP: FF5E : A9 07 lda #$07 ; FF60 : 20 94 F9 jsr OUTCON ; F994 FF63 : A9 2A "*" lda #$2A FF65 : 20 94 F9 jsr OUTCON ; F994 FF68 : A2 00 ldx #$00 FF6A : A0 00 ldy #$00 FF6C ZPGW: FF6C : 94 00 sty X0000,x FF6E : C8 iny FF6F : E8 inx FF70 : D0 FA bne ZPGW ; FF6C FF72 ZPGR: FF72 : 98 tya FF73 : D5 00 cmp X0000,x FF75 : F0 03 beq NZPERR ; FF7A FF77 : 20 B9 FF jsr ERRZPG ; FFB9 FF7A NZPERR: FF7A : C8 iny FF7B : E8 inx FF7C : D0 F4 bne ZPGR ; FF72 FF7E : C8 iny FF7F : D0 EB bne ZPGW ; FF6C FF81 : 86 7E stx X007E ; LOW ADDRESS BYTE FF83 : E8 inx FF84 : 86 7F stx X007F ; HIGH ADDRESS BYTE FF86 : AA tax FF87 HIMEM: FF87 : 91 7E sta (X007E),y FF89 : CA dex FF8A : 8A txa FF8B : C8 iny FF8C : D0 F9 bne HIMEM ; FF87 FF8E : A9 F7 lda #HIPAGE ; $F7 FF90 : C5 7F cmp X007F FF92 : F0 05 beq READM ; FF99 FF94 : 8A txa FF95 : E6 7F inc X007F FF97 : D0 EE bne HIMEM ; FF87 FF99 READM: FF99 : 84 7F sty X007F FF9B NXTPG: FF9B : E6 7F inc X007F FF9D CHKBYT: FF9D : 8A txa FF9E : D1 7E cmp (X007E),y FFA0 : F0 03 beq NMERR ; FFA5 FFA2 : 20 D1 FF jsr MEMERR ; FFD1 FFA5 NMERR: FFA5 : CA dex FFA6 : C8 iny FFA7 : D0 F4 bne CHKBYT ; FF9D FFA9 : A9 F7 lda #HIPAGE ; $F7 FFAB : C5 7F cmp X007F FFAD : D0 EC bne NXTPG ; FF9B FFAF : A9 01 lda #$01 FFB1 : 85 7F sta X007F FFB3 : CA dex FFB4 : 8A txa FFB5 : D0 D0 bne HIMEM ; FF87 FFB7 : F0 A5 beq MLOOP ; FF5E FFB9 ERRZPG: FFB9 : 55 00 eor X0000,x FFBB : 20 6A FE jsr BY2HEX ; FE6A FFBE : A9 2C "," lda #$2C FFC0 : 20 94 F9 jsr OUTCON ; F994 FFC3 : A9 00 lda #$00 FFC5 : 20 6A FE jsr BY2HEX ; FE6A FFC8 : 8A txa FFC9 SUBH: FFC9 : 20 6A FE jsr BY2HEX ; FE6A FFCC : A9 20 lda #$20 FFCE : 4C 94 F9 jmp OUTCON ; F994 ; FFD1 MEMERR: FFD1 : 51 7E eor (X007E),y FFD3 : 20 6A FE jsr BY2HEX ; FE6A FFD6 : A9 2C "," lda #$2C FFD8 : 20 94 F9 jsr OUTCON ; F994 FFDB : A5 7F lda X007F FFDD : 20 6A FE jsr BY2HEX ; FE6A FFE0 : 98 tya FFE1 : 4C C9 FF jmp SUBH ; FFC9 ; FFE4 : FF FF FF FF " " db $FF, $FF, $FF, $FF FFE8 : FF FF FF FF " " db $FF, $FF, $FF, $FF FFEC : FF FF FF FF " " db $FF, $FF, $FF, $FF FFF0 : FF FF FF FF " " db $FF, $FF, $FF, $FF FFF4 : FF FF FF FF " " db $FF, $FF, $FF, $FF FFF8 : FF FF db $FF, $FF FFFA : FA F7 ; NMI FFFC : 77 FD ; RESET ROM1 FFFE : FD F7 ; IRQ/BRK