; ; 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 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 lda # 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 " 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 :" 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 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 " 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 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 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