horses/Titan2e/0C00_part.s

1324 lines
36 KiB
ArmAsm

;
; This is based on a disassembly of the Titan //e disk
; This is the main setup and config code.
; This loaded as part of the interpreter, and then gets moved to
; its original $0C00 location and then run.
;
SRCPTR = $00
DSTPTR = $02
STARTBLK = $04
ENDBLK = $05
IBBUFP = $85
IBCMD = $87
KBD = $c000 ;last key pressed
CLR80VID = $c00c ;W disable 80-column display mode
KBDSTRB = $c010 ;RW keyboard strobe
SETTEXTGR = $c051 ;Set TEXT/GR mode
CLRPAGE2 = $c054 ;Clear PAGE2 mode
CLOCK = $c070 ;clock
CLRENCWRT = $c0da ;Clear Char Set writing
SETENCWRT = $c0db ;Set Char Set writing
BLOCKIO = $f479
A3RESET = $f4ee
A2RESET = $fa62
Z_REG = $ffd0 ;zero page register
ENV_REG = $ffdf ;environment register
E_PCR = $ffec
E_IFR = $ffed
E_IER = $ffee
BNK_REG = $ffef ;bank switch register
L1400 = $1400
L1401 = $1401
L1403 = $1403
L1800 = $1800
.segment "RAM"
.import SLOT5ROM
.import SLOT6ROM
.import SLOT7ROM
.import TWOEROM
FONT = $9000
.org $0C00
L0C00: ldy #$00 ;clear extended addressing pages
L0C02: lda SRCPTR,y
sta L1800,y
lda #$00
sta L1400,y
iny
bne L0C02
lda #$18 ;set zero page to $18
sta Z_REG
;comment this section out, dont need to load from disk now
; lda #$00 ;set bank 0
; sta BNK_REG
; lda #$00 ;set IBBUFP to $9000
; sta IBBUFP
; lda #$90
; sta IBBUFP+1
; lda #$11 ;start blk 17
; sta STARTBLK
; lda #$29 ;end blk 40
; sta ENDBLK
; jsr READBLKS
; lda #$00 ;set IBBUFP to $2000
; sta IBBUFP
; lda #$20
; sta IBBUFP+1
; lda #$29 ;start block 41
; sta STARTBLK
; lda #$2b ;end block 42
; sta ENDBLK
; jsr READBLKS
; copy slot roms in (from current bank)
lda ENV_REG
and #$b7 ;bf i/o cxxx off, write protect ram off
sta ENV_REG
ldy #$00
@L0C4A: lda SLOT5ROM,y ;copy slot 5 rom in
sta $c500,y
lda SLOT6ROM,y ;copy slot 6 rom in
sta $c600,y
lda SLOT7ROM,y ;copy slot 7 rom in
sta $c700,y
iny
bne @L0C4A
lda ENV_REG
ora #$40 ;i/o cxxx on
sta ENV_REG
; again comment out, disk loading not needed
; lda #$00 ;set IBBUFP to $2000
; sta IBBUFP
; lda #$20
; sta IBBUFP+1
; lda #$2b ;start block 43
; sta STARTBLK
; lda #$43 ;end block 66
; sta ENDBLK
; jsr READBLKS
; copy //e rom in (from current bank)
lda #<TWOEROM ;set SCRPTR to TWOEROM
sta SRCPTR
lda #>TWOEROM
sta SRCPTR+1
lda #$00 ;disable extended addressing for SRCPTR
sta L1401
sta DSTPTR ;set DSTPTR to $D000
lda #$d0
sta DSTPTR+1
lda #$8f ;set extended addressing to special $8F case
sta L1403 ;(able to copy behind VIAs with 8f)
ldy #$00 ;copy $2000-$4FFF to $D000-$FFFF
@L0C94: lda (SRCPTR),y
sta (DSTPTR),y
iny
bne @L0C94
inc SRCPTR+1
inc DSTPTR+1
bne @L0C94
lda #$00 ;set bank 0, as we copied the font data to there
sta BNK_REG
ldx #>FONT
lda #<FONT
jsr L0CAB ;load the font
jsr SETCOLOR ; this is needed now as after sos is loaded, the foreground/background
; colors are set to 'A0', comes out as faint grey in mame
jmp L0E00
; load character set
L0CAB: sta SRCPTR
stx SRCPTR+1
lda #$00
sta L1401
sta STARTBLK
lda #$18
sta E_IER
lda E_PCR
and #$0f
ora #$30
sta E_PCR
@L0CC5: lda #$07
sta ENDBLK
@L0CC9: jsr @L0CFE
inc STARTBLK
lda SRCPTR
clc
adc #$08
sta SRCPTR
bcc @L0CD9
inc $01
@L0CD9: dec ENDBLK
bpl @L0CC9
bit SETENCWRT
ldx #$18
stx E_IFR
@L0CE5: lda E_IFR
and #$10
beq @L0CE5
stx E_IFR
@L0CEF: lda E_IFR
and #$18
beq @L0CEF
bit CLRENCWRT
lda STARTBLK
bpl @L0CC5
rts
@L0CFE: ldx #$00
ldy #$00
@L0D02: lda ENDBLK
and #$03
ora @L0D2A,y
sta DSTPTR
lda ENDBLK
lsr A
lsr A
cpy #$04
rol A
ora #$08
sta $03
lda STARTBLK
sta (DSTPTR,x)
lda $03
eor #$0c
sta $03
lda (SRCPTR),y
sta (DSTPTR,x)
iny
cpy #$08
bcc @L0D02
rts
@L0D2A: .byte $78
.byte $7c
.byte $f8
.byte $fc
.byte $78
.byte $7c
.byte $f8
.byte $fc
; load blocks in from disk
;READBLKS: lda STARTBLK
; cmp ENDBLK
; bcs @L0D47
; ldx #$00
; jsr BLOCKIO
; bcs @L0D48 ;i/o error
; inc IBBUFP+1
; inc IBBUFP+1
; inc STARTBLK
; bne READBLKS
;@L0D47: rts
;
;; print error
;@L0D48: ldx #$00
;@L0D4A: lda @L0D60,x
; bmi @L0D55
; sta $05b5,x
; inx
; bne @L0D4A
;@L0D55: lda ENV_REG
; ora #$10
; sta ENV_REG
;@L0D5D: jmp @L0D5D
;
;@L0D60: .byte "*** I/O ERROR - RESET ***"
; .byte $80
; .res 132,$00
;pad out until $0e00
STRTLEN = * - L0C00
PAD = $200 - STRTLEN
.res PAD,$00
L0E00: lda #$67 ;(1.I.S.R:W.P.R.R)
; 0 1 1 0 0 1 1 1
sta ENV_REG
nop
nop
lda #$e7 ;(1.I.S.R:W.P.R.R)
; 1 1 1 0 0 1 1 1
sta ENV_REG
lda #$00
sta BNK_REG
sta $c0a1 ;enable something on 3plus2e card?
sta SETTEXTGR ;set text mode for //e(sets color text for A3)
sta CLRPAGE2
sta CLR80VID ;80 column display off
sta KBDSTRB
;detect if we have a clock chip?
ldx #$11
ldy #$14
@L0E24: lda #$00
sta Z_REG
lda CLOCK
sty Z_REG
lda CLOCK
beq @L0E3C
dex
bne @L0E24
lda #$60
sta $c700
;check /// memory size is 256k (or greater)
@L0E3C: lda #$03 ;banks 0-2 for 128k, 0-7 for 256k
sta BNK_REG
lda $2000
eor #$55
sta $2000
cmp $2000
php
eor #$55
sta $2000
plp
beq @L0E5F
lda #$80
sta $c7aa
lda #$00
sta $c7ab
@L0E5F: lda #$00 ;set bank=0
sta BNK_REG
lda #$18 ;set zp=$18
sta Z_REG
jsr L1F29
jsr @L0F05 ;display start menu
@L0E6F: lda KBD ;get key
bpl @L0E6F
sta KBDSTRB
cmp #$b1 ;is it '1'?
beq @L0ECC ;start Apple /// mode
cmp #$b3 ;is it '3'?
beq @L0ED7 ;start Apple //e mode
cmp #$b2 ;is it '2'?
bne @L0E6F ;no, get another key, fall through if 2
; change configuration
@L0E83: jsr L1F29 ;clear text screen
ldx #$c6
ldy #$c6
lda $c7a0
beq @L0E93
ldx #$a0
ldy #$ee
@L0E93: sty L10BA
stx L10BB
jsr L0FF5 ;display main config menu
@L0E9C: lda KBD
bpl @L0E9C
sta KBDSTRB
cmp #$b1 ;is it '1'?
beq @L0EC0 ;printer settings
cmp #$b3 ;is it '3'?
beq @L0EBA ;double hires
cmp #$b2 ;is it '2'?
beq @L0EC6 ;communications settings
cmp #$b4 ;is it '4'?
bne @L0E3C
jsr L1DE6 ;save settings
jmp @L0E83
@L0EBA: jsr @L0EFA ;double hires
jmp @L0E83
@L0EC0: jsr L12A3 ;printer settings
jmp @L0E83
@L0EC6: jsr L1D17 ;communications settings
jmp @L0E83
; start Apple /// mode
@L0ECC: sta $c0a0 ;disable 3plus2e card?
lda #$ff ;2Mhz,i/o,video,reset,writeprot_ram,prim_stack,rom enabled
sta ENV_REG
jmp A3RESET
; start Apple //e mode
@L0ED7: lda $c7a0
sta $a7a0
ldx #>FONT
lda #<FONT
jsr L0CAB ;load the font
jsr L1F29 ;clear text screen
lda #$fc ;1Mhz,i/o,video,reset,writeprot_ram,prim_stack,no rom enabled
sta ENV_REG
lda #$00
sta Z_REG ;Zero page to 00
sta BNK_REG ;bank 00
sta $c300 ;enable 3plus2 card
jmp A2RESET ;go run as Apple IIe
; update double hires setting
@L0EFA: lda $c7a0
eor #$02
and #$02
sta $c7a0
rts
@L0F05: lda #$00
@L0F07: tay
ldx @L0F24,y
bmi @L0F23
pha
lda @L0F25,y
ldx @L0F25+1,y
pha
lda @L0F24,y
tay
pla
jsr L1F48
pla
clc
adc #$03
bne @L0F07
@L0F23: rts
; start menu
@L0F24: .byte $0a ;length
@L0F25: .word T0F37 ;line address
.byte $0e
.word T0F56
.byte $14
.word T0F77
.byte $18
.word T0F99
.byte $1c
.word T0FB6
.byte $22
.word T0FD8
.byte $ff
.macro HiAscii Arg
.repeat .strlen(Arg), I
.byte .strat(Arg, I) | $80
.endrep
.endmacro
T0F37: HiAscii " TITAN /// plus //e"
.byte $00
T0F56: HiAscii " MACHINE STARTUP MAIN MENU"
.byte $00
T0F77: HiAscii " 1) START APPLE /// OPERATION"
.byte $00
T0F99: HiAscii " 2) CHANGE //e EMULATION"
.byte $00
T0FB6: HiAscii " 3) START APPLE //e EMULATION"
.byte $00
T0FD8: HiAscii " SELECT BY NUMBER"
.byte $00
; display main config menu
L0FF5: lda #$00
@L0FF7: tay
ldx @L1014,y
bmi @L1013
pha
lda @L1015,y
ldx @L1015+1,y
pha
lda @L1014,y
tay
pla
jsr L1F48
pla
clc
adc #$03
bne @L0FF7
@L1013: rts
; main setup menu
@L1014: .byte $0a
@L1015: .word T102D
.byte $0e
.word T1048
.byte $14
.word T1067
.byte $18
.word T1080
.byte $1c
.word T10A0
.byte $20
.word T10BD
.byte $26
.word T10D7
.byte $28
.word T10F4
.byte $ff
T102D: HiAscii " TITAN /// plus //e"
.byte $00
T1048: HiAscii " APPLE //e EMULATION SETTINGS"
.byte $00
T1067: HiAscii " 1) Printer Settings"
.byte $00
T1080: HiAscii " 2) Communications Settings"
.byte $00
T10A0: HiAscii " 3) Double Hi-Res is O"
L10BA: .byte $ee
L10BB: .byte $a0
.byte $00
T10BD: HiAscii " 4) Save New Settings"
.byte $00
T10D7: HiAscii " ENTER CHOICE BY NUMBER"
.byte $00
T10F4: HiAscii " <RETURN> FOR PREVIOUS MENU"
.byte $00
L1113: lda #$00
@L1115: tay
ldx @L1132,y
bmi @L1131
pha
lda @L1133,y
ldx @L1133+1,y
pha
lda @L1132,y
tay
pla
jsr L1F48
pla
clc
adc #$03
bne @L1115
@L1131: rts
@L1132: .byte $02
@L1133: .word T1157
.byte $06
.word T1172
.byte $0c
.word T1190
.byte $10
.word T11AC
.byte $14
.word T11C1
.byte $18
.word T11DF
.byte $1c
.word T11F3
.byte $20
.word T120E
.byte $24
.word T1229
.byte $28
.word T1246
.byte $2c
.word T1261
.byte $2e
.word T1281
.byte $ff
T1157: HiAscii " TITAN /// plus //e"
.byte $00
T1172: HiAscii " SLOT 1 PRINTER SETTINGS"
.byte $00
T1190: HiAscii " 1) Baud rate is "
L11A5: HiAscii " 19200"
.byte $00
T11AC: HiAscii " 2) "
L11B4: HiAscii "SPACE Parity"
.byte $00
T11C1: HiAscii " 3) Data Format is "
L11D8: HiAscii "8 Bits"
.byte $00
T11DF: HiAscii " 4) "
L11E7: HiAscii "2 Stop Bit"
L11F1: .byte $f3
.byte $00
T11F3: HiAscii " 5) Line Length is "
L120A: .byte $cf
L120B: .byte $c6
L120C: .byte $c6
.byte $00
T120E: HiAscii " 6) Page Length is "
L1225: .byte $cf
L1226: .byte $c6
L1227: .byte $c6
.byte $00
T1229: HiAscii " 7) Line Feeds are "
L1240: .byte $c1
L1241: .byte $c4
L1242: .byte $c4
L1243: .byte $c5
L1244: .byte $c4
.byte $00
T1246: HiAscii " 8) HI-BIT is "
L1258: .byte $c4
L1259: .byte $c9
L125A: HiAscii "SABLED"
.byte $00
T1261: HiAscii " TOGGLE CHOICE BY NUMBER"
.byte $00
T1281: HiAscii " <RETURN> FOR PREVIOUS MENU"
.byte $00
L12A3: jsr L1F29
lda $c7a6
pha
and #$0f
asl A
asl A
asl A
tax
ldy #$00
@L12B2: lda L1C6F,x
sta L11A5,y
inx
iny
cpy #$06
bne @L12B2
pla
pha
and #$60
lsr A
lsr A
lsr A
lsr A
lsr A
sta SRCPTR
sec
lda #$b8
sbc SRCPTR
sta L11D8
pla
bmi @L12E0
lda #$b1
sta L11E7
lda #$a0
sta L11F1
bne @L12EA
@L12E0: lda #$b2
sta L11E7
lda #$f3
sta L11F1
@L12EA: lda $c7a7
ldx #$20
and #$e0
beq @L12F9
lsr A
lsr A
lsr A
and #$18
tax
@L12F9: ldy #$00
@L12FB: lda L1CEF,x
sta L11B4,y
inx
iny
cpy #$05
bne @L12FB
lda $c7a3
bne @L131B
lda #$cf
sta L120A
lda #$c6
sta L120B
sta L120C
bne @L1327
@L131B: jsr L1B19
sta L120A
stx L120B
sty L120C
@L1327: lda $c7a4
bne @L133B
lda #$cf
sta L1225
lda #$c6
sta L1226
sta L1227
bne @L1347
@L133B: jsr L1B19
sta L1225
stx L1226
sty L1227
@L1347: lda $c7a5
pha
and #$08
bne @L1366
lda #$cf
sta L1240
lda #$c6
sta L1241
sta L1242
lda #$a0
sta L1243
sta L1244
bne @L137B
@L1366: lda #$c1
sta L1240
lda #$c4
sta L1241
sta L1242
sta L1244
lda #$c5
sta L1243
@L137B: pla
and #$04
bne @L1391
lda #$c4
sta L1258
lda #$c9
sta L1259
lda #$d3
sta L125A
bne @L13A0
@L1391: lda #$a0
sta L1258
lda #$c5
sta L1259
lda #$ce
sta L125A
@L13A0: jsr L1113
@L13A3: lda KBD
bpl @L13A3
sta KBDSTRB
cmp #$b1
beq @L13E4
cmp #$b2
beq @L13EA
cmp #$b3
beq @L13F0
cmp #$b4
beq @L13F6
cmp #$b5
beq @L13CC
cmp #$b6
beq @L13D2
cmp #$b7
beq @L13D8
cmp #$b8
beq @L13DE
rts
@L13CC: jsr L1A00
jmp L12A3
@L13D2: jsr L1A07
jmp L12A3
@L13D8: jsr L1A0E
jmp L12A3
@L13DE: jsr L1A17
jmp L12A3
@L13E4: jsr L1A51
jmp L12A3
@L13EA: jsr L1A34
jmp L12A3
@L13F0: jsr L1A20
jmp L12A3
@L13F6: lda $c7a6
clc
adc #$80
jmp L1FA0
;
.res 1,0
.res $600,0
L1A00: jsr L1A88
sta $c7a3
rts
L1A07: jsr L1A88
sta $c7a4
rts
L1A0E: lda $c7a5
eor #$08
sta $c7a5
rts
L1A17: lda $c7a5
eor #$04
sta $c7a5
rts
L1A20: lda $c7a6
pha
and #$9f
sta SRCPTR
pla
clc
adc #$20
and #$60
ora SRCPTR
sta $c7a6
rts
L1A34: lda $c7a7
pha
rol A
rol A
rol A
rol A
and #$07
tax
pla
and #$1f
ora L1A49,x
sta $c7a7
rts
L1A49: .byte $20
.byte $60
.byte $20
.byte $a0
.byte $20
.byte $e0
.byte $20
.byte $00
L1A51: lda $c7a6
pha
and #$f0
sta SRCPTR
pla
clc
adc #$01
and #$0f
ora SRCPTR
sta $c7a6
rts
L1A65: HiAscii "ENTER NUMBER, THEN <RETURN>:"
L1A81: .byte $a0
L1A82: .byte $a0
L1A83: .byte $a0
L1A84: .byte $a0
.byte $a0
.byte $a0
.byte $00
L1A88: jsr L1F29
lda #$a0
sta L1A82
sta L1A83
sta L1A84
ldy #$00
@L1A98: sty STARTBLK
@L1A9A: lda #<L1A65
ldx #>L1A65
ldy #20
jsr L1F48
@L1AA3: lda KBD
bpl @L1AA3
sta KBDSTRB
ldy STARTBLK
cmp #$8d
beq @L1AD6
cmp #$88
bne @L1ACB
dec STARTBLK
bmi @L1AC0
lda #$a0
sta L1A81,y
bne @L1A9A
@L1AC0: lda #$a0
sta L1A82
lda #$00
sta STARTBLK
beq @L1A9A
@L1ACB: cpy #$03
bne @L1AD0
dey
@L1AD0: sta L1A82,y
iny
bne @L1A98
@L1AD6: lda #$00
sta SRCPTR
dec STARTBLK
bmi @L1AFE
lda L1A82
jsr @L1B01
bcs L1A88
dec STARTBLK
bmi @L1AFE
lda L1A83
jsr @L1B01
bcs L1A88
dec STARTBLK
bmi @L1AFE
lda L1A84
jsr @L1B01
bcs L1A88
@L1AFE: lda SRCPTR
rts
@L1B01: cmp #$b0
bcc @L1B17
cmp #$ba
bcs @L1B17
and #$0f
ldy #$0a
@L1B0D: clc
adc SRCPTR
dey
bne @L1B0D
sta SRCPTR
clc
rts
@L1B17: sec
rts
L1B19: cmp #$64
bcc @L1B31
sbc #$64
cmp #$64
bcc @L1B2B
sbc #$64
tay
lda #$b2
pha
bne @L1B35
@L1B2B: tay
lda #$b1
pha
bne @L1B35
@L1B31: tay
lda #$a0
pha
@L1B35: php
sed
lda #$00
@L1B39: dey
bmi @L1B41
clc
adc #$01
bne @L1B39
@L1B41: pha
and #$0f
ora #$b0
tay
pla
lsr A
lsr A
lsr A
lsr A
ora #$b0
tax
plp
pla
cmp #$a0
bne @L1B5B
cpx #$b0
bne @L1B5B
ldx #$a0
@L1B5B: rts
L1B5C: lda #$00
@L1B5E: tay
ldx @L1B7B,y
bmi @L1B7A
pha
lda @L1B7C,y
ldx @L1B7C+1,y
pha
lda @L1B7B,y
tay
pla
jsr L1F48
pla
clc
adc #$03
bne @L1B5E
@L1B7A: rts
@L1B7B: .byte $0a
@L1B7C: .word T1B94
.byte $0e
.word T1BAF
.byte $14
.word T1BD0
.byte $18
.word T1BEC
.byte $1c
.word T1C01
.byte $20
.word T1C1F
.byte $26
.word T1C33
.byte $28
.word T1C50
.byte $ff
T1B94: HiAscii " TITAN /// plus //e"
.byte $00
T1BAF: HiAscii " SLOT 2 COMMUNICATIONS SETTINGS"
.byte $00
T1BD0: HiAscii " 1) Baud rate is "
L1BE5: HiAscii " 19200"
.byte $00
T1BEC: HiAscii " 2) "
L1BF4: HiAscii "SPACE Parity"
.byte $00
T1C01: HiAscii " 3) Data Format is "
L1C18: HiAscii "8 Bits"
.byte $00
T1C1F: HiAscii " 4) "
L1C27: HiAscii "2 Stop Bit"
L1C31: .byte $f3
.byte $00
T1C33: HiAscii " TOGGLE CHOICE BY NUMBER"
.byte $00
T1C50: HiAscii " <RETURN> FOR PREVIOUS MENU"
.byte $00
L1C6F: .byte $b1,$b1,$b5,$b2,$b0,$b0,$a0,$a0,$b5,$b0,$a0,$a0,$a0,$a0,$a0,$a0
.byte $b7,$b5,$a0,$a0,$a0,$a0,$a0,$a0,$b1,$b1,$b0,$a0,$a0,$a0,$a0,$a0
.byte $b1,$b3,$b5,$a0,$a0,$a0,$a0,$a0,$b1,$b5,$b0,$a0,$a0,$a0,$a0,$a0
.byte $b3,$b0,$b0,$a0,$a0,$a0,$a0,$a0,$b6,$b0,$b0,$a0,$a0,$a0,$a0,$a0
.byte $b1,$b2,$b0,$b0,$a0,$a0,$a0,$a0,$b1,$b8,$b0,$b0,$a0,$a0,$a0,$a0
.byte $b2,$b4,$b0,$b0,$a0,$a0,$a0,$a0,$b3,$b6,$b0,$b0,$a0,$a0,$a0,$a0
.byte $b4,$b8,$b0,$b0,$a0,$a0,$a0,$a0,$b7,$b2,$b0,$b0,$a0,$a0,$a0,$a0
.byte $b9,$b6,$b0,$b0,$a0,$a0,$a0,$a0,$b1,$b9,$b2,$b0,$b0,$a0,$a0,$a0
L1CEF: HiAscii "ODD EVEN MARK SPACE NO "
L1D17: jsr L1F29
lda $c7a1
pha
and #$0f
asl A
asl A
asl A
tax
ldy #$00
@L1D26: lda L1C6F,x
sta L1BE5,y
inx
iny
cpy #$06
bne @L1D26
pla
pha
and #$60
lsr A
lsr A
lsr A
lsr A
lsr A
sta SRCPTR
sec
lda #$b8
sbc SRCPTR
sta L1C18
pla
bmi @L1D54
lda #$b1
sta L1C27
lda #$a0
sta L1C31
bne @L1D5E
@L1D54: lda #$b2
sta L1C27
lda #$f3
sta L1C31
@L1D5E: lda $c7a2
ldx #$20
and #$e0
beq @L1D6D
lsr A
lsr A
lsr A
and #$18
tax
@L1D6D: ldy #$00
@L1D6F: lda L1CEF,x
sta L1BF4,y
inx
iny
cpy #$05
bne @L1D6F
jsr L1B5C
@L1D7E: lda KBD
bpl @L1D7E
sta KBDSTRB
cmp #$b1
beq @L1D97
cmp #$b2
beq @L1DAD
cmp #$b3
beq @L1DC4
cmp #$b4
beq @L1DDA
rts
@L1D97: lda $c7a1
pha
and #$f0
sta SRCPTR
pla
clc
adc #$01
and #$0f
ora SRCPTR
sta $c7a1
jmp L1D17
@L1DAD: lda $c7a2
pha
rol A
rol A
rol A
rol A
and #$07
tax
pla
and #$1f
ora L1A49,x
sta $c7a2
jmp L1D17
@L1DC4: lda $c7a1
pha
and #$9f
sta SRCPTR
pla
clc
adc #$20
and #$60
ora SRCPTR
sta $c7a1
jmp L1D17
@L1DDA: lda $c7a1
clc
adc #$80
sta $c7a1
jmp L1D17
; save config settings
L1DE6: rts ;disable the save settings for now, need to adapt to sos some how
nop
;lda #$01 ;read block $2a into $2000
sta IBCMD
lda #$00
sta IBBUFP
lda #$20
sta IBBUFP+1
jsr L1E50
ldx #$00
lda #$2a
jsr BLOCKIO
bcs @L1E2C ;error reading block
ldy #$25 ;check copyright message
@L1E00: lda $2100,y
cmp L1EB1,y
bne L1E7A ;not matching, error
dey
bpl @L1E00
ldy #$00
@L1E0D: lda $c700,y
sta $2000,y
iny
bne @L1E0D
lda #$02
sta IBCMD
lda #$00
sta IBBUFP
lda #$20
sta IBBUFP+1
jsr L1E50
ldx #$00
lda #$2a
jsr BLOCKIO
@L1E2C: bcs L1E7A
lda #$01
sta IBCMD
jsr L1F29
lda #<L1E5A
ldx #>L1E5A
ldy #30
jsr L1F48
L1E3E: ldx #$00
@L1E40: ldy #$00
@L1E42: lda #$02
sec
@L1E45: sbc #$01
bne @L1E45
dey
bne @L1E42
dex
bne @L1E40
rts
L1E50: lda $c0e9
sta $c0a4
sta $c0a0
rts
L1E5A: HiAscii "CONFIGURATION UPDATE SUCCESSFUL"
.byte $00
L1E7A: jsr L1F29
lda #<L1E89
ldx #>L1E89
ldy #30
jsr L1F48
jmp L1E3E
L1E89: HiAscii "UNABLE TO MODIFY DISKETTE--PLEASE CHECK"
.byte $00
L1EB1: HiAscii "COPYRIGHT 1985 BY HARMONY SYSTEMS INC"
sta SRCPTR
stx $01
lda ENV_REG
pha
and #$f7
sta ENV_REG
lda #$00
sta DSTPTR
lda #$f8
sta $03
lda #$8f
sta L1403
ldy #$00
@L1EF2: lda (SRCPTR),y
sta (DSTPTR),y
iny
bne @L1EF2
inc $01
inc $03
bne @L1EF2
pla
sta ENV_REG
rts
sta SRCPTR
stx $01
lda #$00
sta DSTPTR
lda #$a1
sta $03
lda #$8f
sta L1403
ldy #$00
@L1F17: lda (SRCPTR),y
sta (DSTPTR),y
iny
bne @L1F17
inc $01
inc $03
lda $03
cmp #$b0
bne @L1F17
rts
; clear text screen
L1F29: ldx #$00 ;disable extended addressing for SRCPTR
stx L1401
@L1F2E: lda L1F69,x
sta SRCPTR
inx
lda L1F69,x
sta SRCPTR+1
inx
lda #$a0 ;space character
ldy #39 ;number of characters per line
@L1F3E: sta (SRCPTR),y
dey
bpl @L1F3E
cpx #48 ;number of text lines x2
bne @L1F2E
rts
; display line of text on text screen
; stop when character = 0
; input:
; a = address low byte of message
; x = address high byte of message
; y = line to start message on
;
L1F48: sta SRCPTR
stx SRCPTR+1
lda L1F69,y
sta DSTPTR
lda L1F69+1,y
sta DSTPTR+1
lda #$00
sta L1401 ;disable extended addressing for SRCPTR
sta L1403 ;disable extended addressing for DSTPTR
tay
@L1F5F: lda (SRCPTR),y
beq @L1F68
sta (DSTPTR),y
iny
bne @L1F5F
@L1F68: rts
; text screen lines address table
L1F69: .word $0400
.word $0480
.word $0500
.word $0580
.word $0600
.word $0680
.word $0700
.word $0780
.word $0428
.word $04a8
.word $0528
.word $05a8
.word $0628
.word $06a8
.word $0728
.word $07a8
.word $0450
.word $04d0
.word $0550
.word $05d0
.word $0650
.word $06d0
.word $0750
.word $07d0
.res 7,$ff
L1FA0: sta $c7a6
jmp L12A3
; set foreground/background color for text screen
SETCOLOR: ldx #$00 ;disable extended addressing for SRCPTR
stx L1401
@L1F2E: lda L1F69,x
sta SRCPTR
inx
lda L1F69,x
clc
adc #$04
sta SRCPTR+1
inx
lda #$F0 ;space character
ldy #39 ;number of characters per line
@L1F3E: sta (SRCPTR),y
dey
bpl @L1F3E
cpx #48 ;number of text lines x2
bne @L1F2E
rts
.res $2000 - *,0 ;pad out to $1fff