antoine-source/mdt/FW1.S

1196 lines
22 KiB
ArmAsm

*
* MicroDrive Turbo
* (c) 1996-2006, Joachim Lange
* (s) 2019, Brutal Deluxe Software
*
mx %11
org $c800
dsk FW1.NEW
lst off
*----------------------------
SLOT161 = $C1 ; This is for slot 1
MSLOT EQU $07F8
KBD EQU $C000
KBDSTROBE EQU $C010
SPKR EQU $C030
DMAREG EQU $C037
SLOOP EQU $FABA
INIT EQU $FB2F
SETTXT EQU $FB39
HOME EQU $FC58
SETKBD EQU $FE89
SETVID EQU $FE93
*----------------------------
LDY #$20
LDY #$00
LDY #$03
LDY #$00
CLD
JSR SETKBD
JSR SETVID
JSR INIT
JSR HOME
LDA #SLOT161
STA MSLOT
LC81A LDA LCFFF
STZ $C092
JMP LCC58
LC823 CLV
BVC LC828
LC826 SEP #$40
LC828 LDA #SLOT161
STA MSLOT
LDA LCFFF
STZ $C092
LDA LC980
EOR #$82
CMP LC981
BEQ LC842
PHP
JSR LCD13
PLP
LC842 BVS LC847
JMP LCA16
LC847 LDA #$01
STA $C092
CLC
XCE
REP #$30
LDA $42
STA LC9E0
LDA $44
STA LC9E0+2
LDA $46
STA LC9E4
LDA $48
STA LC9E5+1
LDA $4A
STA LC9E5+3
LDA $4C
STA LC9EA
LDA $4E
STA LC9EA+2
LDA $50
STA LC9EE
SEP #$30
LDY #$01
LC87C LDA ($01,S),Y
LC87E STA LC925
BIT LC925
BVC LC889
JMP LCA01
LC889 INY
REP #$20
LDA ($01,S),Y
STA $4C
TSX
LDA $0101,X
CLC
ADC #$0003
STA $0101,X
SEP #$20
LDY #$01
LDA ($4C),Y
STA LC927
CMP LC81A
BCC LC8AD
BEQ LC8AD
BCS LC8DC
LC8AD INY
REP #$20
LDA ($4C),Y
STA $44
SEP #$20
INY
LDA LC925
CMP #$04
BEQ LC8E5
CMP #$03
BEQ LC8E5
BCS LC8E2
CMP #$01
BCC LC8D2
INY
REP #$20
LDA ($4C),Y
STA $46
SEP #$20
INY
LC8D2 INY
LDA ($4C),Y
STA $48
BCC LC8DF
JMP LCA01
LC8DC JMP LCA01
LC8DF JMP LCA01
LC8E2 JMP LCA01
LC8E5 CLC
STZ LC92B
LC8E9 JMP LCA01
DB $01
DB $03
DB $07
DB $0F
DB $FF
DB $FF
ASC "IDU"
DB $10
DB $00
LC8F7 ASC "MT"
LC8F9 ASC "JL"
LC8FB DB $80
DB $00
DB $00
LC8FE DB $3F
LC8FF DB LC823 ; Smartport ID (add 3 for entry point)
*----------------------------
LC900 ASC "JL"
DB $64
DB $02
DB $64
DB $02
DB $00
DB $00
DB $00
DB $00
DB $05
DB $00
DB $05
DB $00
DB $00
DB $00
DB $00
DB $00
DB $01
DB $00
DB $01
DB $00
DB $05
DB $00
DB $03
DB $00
DB $08
DB $00
DB $01
DB $00
DB $03
DB $00
LC920 DB $04
DB $00
DB $00
LC923 DB $00
LC924 DB $01
LC925 DB $00
DB $40
LC927 DB $00
DB $01
DB $00
DB $01
LC92B DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
LC931 DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
LC980 DB $00
LC981 DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
LC9E0 JSL $000000
LC9E4 RTS
LC9E5 JSL $000000
RTS
LC9EA JSL $000000
LC9EE RTS
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
*----------------------------
LCA00 DB $00
LCA01 DB $00
DB $00
LCA03 JMP LCB29
LCA06 LDA #$CE ; Switch bank
STA LC980
STA LC981
LDA #$28
JMP LCAEE
LCA13 JMP LCB18
LCA16 LDA #$03
STA LC920
CLC
XCE
LDA $42
BMI LCA03
LDA LC980
CMP #$CA
BNE LCA06
LCA28 LDX #$01
LDY $43
CPY #$10
BEQ LCA35
INX
CPY #$90
BNE LCA13
LCA35 STX LC927
LCA38 LDA $C09F
BMI LCA38
LDA $42
CMP #$02
BEQ LCA4A
CMP #$01
BEQ LCA9A
JMP LCAF2
LCA4A LDA $48
PHA
STZ $48
JSR LC8E9+1 ; LOGO (see FW4)
PLA
STA $48
JSR LCD62
LDA #$01
STA $C09A
LDA #$30
STA $C09F
REP #$30
LDA $44
STA $C094
SEP #$30
STZ DMAREG
LDA $C096
LCA71 LDA $C09F
BMI LCA71
AND #$FD
CMP #$58
BEQ LCA82
AND #$21
BEQ LCA71
BNE LCA97
LCA82 STA $C093
JSR LCDB7
LCA88 LDA $C09F
BMI LCA88
AND #$FD
CMP #$50
BEQ LCAD5
AND #$21
BEQ LCA88
LCA97 JMP LCADE
LCA9A LDA $48
PHA
STZ $48
JSR LC8E9+1 ; LOGO (see FW4)
PLA
STA $48
LDA #$01
STA $C09A
JSR LCD62
LDA #$20
STA $C09F
REP #$30
LDA $44
STA $C094
SEP #$30
STZ DMAREG
LDA $C097
JSR LCDB7
LCAC4 LDA $C09F
BMI LCAC4
AND #$F9
LSR
BCS LCADE
CMP #$2C
BNE LCAC4
STA $C093
LCAD5 LDA #$00
TAX
LDY #$02
LCADA SEC
XCE
CLC
RTS
LCADE JSR LCEF7
JSR LCD55
DEC LC920
BEQ LCAEC
JMP LCA28
LCAEC LDA #$27
LCAEE SEC
XCE
SEC
RTS
LCAF2 CMP #$00
BNE LCB1D
LDA LC927
ASL
ASL
TAX
LDY LC87E,X
BNE LCB13
LDY LC87C+1,X
LDA LC87C,X
BNE LCB0D
CPY #$00
BEQ LCB18
LCB0D TAX
LDA #$00
LCB10 JMP LCADA
LCB13 LDA #$FF
TAY
BRA LCB0D
LCB18 LDA #$28
JMP LCAEE
LCB1D CMP #$03
BEQ LCB23
BNE LCB29
LCB23 LDA #$00
TAX
TAY
BEQ LCB10
LCB29 CMP #$81
BEQ LCB36
CMP #$82
BEQ LCB6A
LDA #$01
JMP LCAEE
LCB36 JSR LCBB7
LDA #$20
STA $C09F
JSR LCDB7
LCB41 LDA $C09F
BMI LCB41
AND #$F9
CMP #$58
BEQ LCB51
LSR
BCS LCBB0
BRA LCB41
LCB51 REP #$30
LDY $44
LCB55 LDA $C090
STA |$0000,Y
INY
INY
CPY LC923
BCC LCB55
SEP #$30
LDA $C09F
JMP LCBAA
LCB6A JSR LCBB7
LDA #$30
STA $C09F
LCB72 LDA $C09F
BMI LCB72
AND #$FD
CMP #$58
BEQ LCB83
AND #$21
BNE LCBB0
BEQ LCB72
LCB83 REP #$30
LDY $44
LCB87 LDA |$0000,Y
STA $C090
INY
INY
CPY LC923
BCC LCB87
SEP #$30
JSR LCDB7
LCB99 LDA $C09F
BMI LCB99
AND #$FD
CMP #$50
BEQ LCBAA
AND #$21
BNE LCBB0
BEQ LCB99
LCBAA SEC
XCE
LDA #$00
CLC
RTS
LCBB0 SEC
XCE
LDA $C09F
SEC
RTS
LCBB7 LDA $43
LSR
LSR
LSR
AND #$F0
ORA #$A0
STA $C09E
JSR LCD62
LDA #$01
STA $C09A
LDA $46
STA $C09B
LDA #$00
STA $C09C
STA $C09D
LDA $44
STA LC923
LDA $45
INC
INC
STA LC924
RTS
LCBE5 LDY #$00
LCBE7 LDA LCBF3,Y
BEQ LCBF2
STA $04AD,Y
INY
BNE LCBE7
LCBF2 RTS
LCBF3 ASC "Waiting for hard drive..."00
*----------------------------
LCC0D SEC
XCE
STZ $00
LDA #SLOT161
STA $01
JMP SLOOP
LCC18 LDA #$08
STA LC8FB
STZ LC8F9+1
STZ LC8F9
LCC23 LDA $C09F
CMP #$FE
BCS LCC45
CMP #$EF
BEQ LCC45
AND #$F0
CMP #$50
BNE LCC36
CLC
RTS
LCC36 INC LC8F9
BNE LCC23
INC LC8F9+1
BNE LCC23
DEC LC8FB
BNE LCC23
LCC45 SEC
RTS
LCC47 LDA #$01
STA LC8FE
JSR HOME
JSR LCDE7
JSR LCDF4
JMP LCD02
LCC58 CLC
XCE
LDA #$BB
STA LC8F7+1
LDA KBD
BPL LCC6F
LDY KBDSTROBE
CMP #$B0
BEQ LCC0D
CMP #$9B
BEQ LCC0D
LCC6F JSR LCBE5
JSR LCDDB
LDA #$B0
STA $07F7
JSR LCC18
BCS LCC47
JSR HOME
LDA #$B1
STA $07F7
JSR LCD30
LDA #$B2
STA $07F7
BCC LCC94
JMP LCD02
LCC94 LDA #$B3
STA $07F7
LDA #$03
STA LC920
LCC9E LDA #$A0
STA $C09E
JSR LCD62
LDA #$02
STA $C09B
STZ $C09C
STZ $C09D
LDA #$01
STA $C09A
LDA #$20
STA $C09F
JSR LCDB7
JSR LCD89
BCC LCCCA
DEC LC920
BNE LCC9E
BEQ LCCFD
LCCCA CLC
XCE
REP #$30
LDY #$0000
LCCD1 LDA $C090
STA $8000,Y
INY
INY
CPY #$0200
BNE LCCD1
SEC
XCE
MX %11
LDA $C09F
LDA #$B3
STA $07F7
LDA $8000
BEQ LCCFD
CMP #$FF
BEQ LCCFD
LDA #$B5
STA $07F7
SEC
XCE
LDX #$10
JMP $8000
LCCFD LDA #$07
STA LC8FE
LCD02 SEC
XCE
JSR HOME
JSR LCDE7
JSR LCDF4
JSR SETTXT
JMP $E000
LCD13 LDX #$07
LCD15 LDA $42,X
STA LC9EA+2,X
DEX
BPL LCD15
LDA #$EE
STA LC8F7+1
JSR LCD30
LDX #$07
LCD27 LDA LC9EA+2,X
STA $42,X
DEX
BPL LCD27
RTS
LCD30 JSR LCDE1
STZ $C096
JSR LCDDB
STZ $C096
LDX #$03
JSR LCFA0
BCS LCD4B
PHP
LDX #$02
JSR LCFA0
PLP
RTS
LCD4B LDA #$CE
STA LC980
STA LC981
SEC
RTS
LCD55 LDA $C09F
AND #$08
BEQ LCD61
LDA $C090
BRA LCD55
LCD61 RTS
LCD62 LDA #$02
STA LC8FB
STZ LC8F9
STZ LC8F9+1
LCD6D LDA $C09F
BMI LCD78
AND #$F0
CMP #$50
BEQ LCDA2
LCD78 INC LC8F9
BNE LCD6D
INC LC8F9+1
BNE LCD6D
DEC LC8FB
BNE LCD6D
SEC
RTS
LCD89 STZ LC8F9
STZ LC8F9+1
LDA #$02
STA LC8FB
LCD94 LDA $C09F
BMI LCDA6
LSR
BCS LCDA4
AND #$7C
CMP #$2C
BNE LCDA4
LCDA2 CLC
RTS
LCDA4 SEC
RTS
LCDA6 INC LC8F9
BNE LCD94
INC LC8F9+1
BNE LCD94
DEC LC8FB
BNE LCD94
SEC
RTS
LCDB7 LDA #$02
STA LC8FB
STZ LC8F9+1
STZ LC8F9
LCDC2 LDA $C098
BPL LCDCB
LDA $C09F
RTS
LCDCB INC LC8F9
BNE LCDC2
INC LC8F9+1
BNE LCDC2
DEC LC8FB
BNE LCDC2
RTS
LCDDB LDA #$A0
STA $C09E
RTS
LCDE1 LDA #$B0
STA $C09E
RTS
LCDE7 LDY #$00
LCDE9 LDA LCEE0,Y
BEQ LCE11
STA $0750,Y
INY
BNE LCDE9
LCDF4 LDA LC8FE
BEQ LCE11
ASL
TAY
LDA LCE12,Y
STA $1E
LDA LCE13,Y
STA $1F
LDY #$00
LCE07 LDA ($1E),Y
BEQ LCE11
STA $07D0,Y
INY
BNE LCE07
LCE11 RTS
*----------------------------
LCE12 DB $00
LCE13 DB $00
DA LCE22
DA LCE30
DA LCE43
DA LCE61
DA LCE82
DA LCEA4
DA LCECA
LCE22 ASC "drive 1 error"00
LCE30 ASC "drive 1 init error"00
LCE43 ASC "configuration data is missing"00
LCE61 ASC "configuration drive 2 is missing"00
LCE82 ASC "service call, turn power off & on"00
LCEA4 ASC "read error when loading configuration"00
LCECA ASC "boot block is missing"00
LCEE0 ASC "MicroDrive/Turbo Card:"00
LCEF7 LDX #$20
STX LC931
LDY #$40
LCEFE LDA SPKR
LDX LC931
LCF04 DEX
BNE LCF04
DEY
BNE LCEFE
LDX #$50
LCF0C DEY
BNE LCF0C
DEX
BNE LCF0C
RTS
*----------------------------
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
DB $FF
*----------------------------
LCFA0 LDA LCA00
STA LC8FF
STX $C092
JMP LCA01
LDA LC8FF
STA $C092
RTS
*----------------------------
DB $00
DB $01
DB $02
DB $03
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
DB $00
LCFFF DB $00
*----------------------------