;;; ============================================================ ;;; Franklin ACE 2X00 ROM V6.0 Disassembly ;;; ;;; First $1000 bytes of U2 ROM (usually banked in $C000-$CFFF) ;;; ;;; Build with CC65's ca65 assembler ;;; ============================================================ .setcpu "65C02" .include "opcodes.inc" .feature string_escapes ;;; ============================================================ ;;; Patches ;;; Set to 1 to include fixes for: ;;; * MouseText mode failing to exist on $18 output. ;;; * CH not working to set horizontal cursor position. ;;; * MouseText displaying if $40-$5F sent to COUT. INCLUDE_PATCHES = 0 ;;; ============================================================ ;;; Equates ;;; Zero Page WNDLFT := $20 WNDWDTH := $21 WNDTOP := $22 WNDBTM := $23 CH := $24 CV := $25 BASL := $28 BASH := $29 BAS2L := $2A BAS2H := $2B INVFLG := $32 CSWL := $36 CSWH := $37 KSWL := $38 KSWH := $39 A1L := $3C A1H := $3D A2L := $3E A2H := $3F A4L := $42 A4H := $43 RNDL := $4E RNDH := $4F ;;; Page 3 Vectors XFERVEC := $3ED ;;; Screen Holes SAVEA := $4F8 SAVEX := $578 SAVEY := $478 SAVECV := $6F8 SAVECH := $778 OLDCH := $47B MODE := $4FB ;; Bit 7 = Escape Mode ;; Bit 6 = MouseText active ;; Bit 5 = ??? set when "normal" ;; Bit 4 = ??? set when "normal" ;; Bit 3 = ??? unused ??? ;; Bit 2 = ??? unused ??? ;; Bit 1 = ??? used for ??? ;; Bit 0 = ??? used for ??? M_ESC = %10000000 M_MOUSE = %01000000 M_NORMAL= %00110000 M_INACTIVE = $FF ; When firmware is inactive OURCH := $57B OURCV := $5FB CHAR := $67B XCOORD := $6FB TEMP1 := $77B ; Unused OLDBASL := $77B TEMP2 := $7FB OLDBASH := $7FB ;;; I/O Soft Switches KBD := $C000 CLR80COL:= $C000 SET80COL:= $C001 RDMAINRAM := $C002 RDCARDRAM := $C003 WRMAINRAM := $C004 WRCARDRAM := $C005 ALTZPOFF:= $C008 ALTZPON := $C009 CLR80VID:= $C00C SET80VID:= $C00D CLRALTCHAR := $C00E SETALTCHAR := $C00F KBDSTRB := $C010 RDLCBNK2:= $C011 RDLCRAM := $C012 RDRAMRD := $C013 RDRAMWRT:= $C014 RD80COL := $C018 RDTEXT := $C01A ALTCHARSET := $C01E RD80VID := $C01F TXTPAGE1:= $C054 TXTPAGE2:= $C055 ROMIN := $C081 ROMIN2 := $C082 LCBANK2 := $C083 LCBANK1 := $C08B ;;; Documented Firmware Entry Points C3KeyIn := $C305 C3COut1 := $C307 AUXMOVE := $C311 XFER := $C314 CLRROM := $CFFF ;;; Monitor ROM BELLB := $FBE2 SETWND := $FB4B SETKBD := $FE89 SETVID := $FE93 MON_VTAB:= $FC22 CLREOP := $FC42 HOME := $FC58 CLREOL := $FC9C ;;; ============================================================ .org $C000 ;;; ============================================================ ;;; Page $C0 - Unused (garbage data?) .byte $80 .byte $2C .byte $80 .byte $03 nop pha pla pha pla clc clv pha phx phy .byte $8D .byte $79 .byte $06 .byte $8D .byte $FF .byte $CF sta $C079 .byte $50 .byte $0B .byte $A2 rmb0 $86 rol $A2,x .byte $C1 stx $37 jsr $B000 jsr $B02C sta $C078 ply plx pla rts bit $C12D bra $C00B brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk brk bbs7 $FF,$C0D3 brk bbs7 $FF,$C0D7 brk bbs7 $FF,$C0DB brk bbs7 $FF,$C0DF brk bbs7 $FF,$C0E3 brk bbs7 $FF,$C0E7 brk bbs7 $FF,$C0EB brk bbs7 $FF,$C0EF brk bbs7 $FF,$C0F3 brk bbs7 $FF,$C0F7 brk bbs7 $FF,$C0FB brk bbs7 $FF,$C0FF brk ;;; ============================================================ ;;; Page $C1 - Parallel Port Firmware LC100: lda $24 pha lda $22 sta $25 stz $24 jsr MON_VTAB LC10C: jsr $FA37 ; ??? ldy $29 sty $2B ldy $28 sty $2A lda $23 beq LC151 dec a cmp $25 beq LC151 bcc LC151 inc $25 jsr MON_VTAB ldy $21 dey bit RD80VID LC12D: bmi LC138 LC12F: lda ($28),y sta ($2A),y dey bpl LC12F bra LC10C LC138: tya lsr a tay LC13B: bit TXTPAGE1 lda ($28),y sta ($2A),y bit TXTPAGE2 lda ($28),y sta ($2A),y dey bpl LC13B bit TXTPAGE1 bra LC10C LC151: stz $24 jsr CLREOL plx stx $24 jmp MON_VTAB ;;; ============================================================ .res $C300 - *, 0 ;;; ============================================================ ;;; Page $C3 - Enhanced 80 Column Firmware ;; Init LC300: bit SETV ; V = init bra MainEntry ;; Input .assert * = C3KeyIn, error, "Entry point mismatch" LC305: sec .byte OPC_BCC ; never taken; skip next byte ;; Output .assert * = C3COut1, error, "Entry point mismatch" LC307: clc clv bra MainEntry ;; Signature bytes .byte $01, $88 ;; Pascal 1.1 Firmware Protocol Table .byte LC305 stx KSWH lda #