From a680fb282c4a801aaebf636b7d86505c546e8ec0 Mon Sep 17 00:00:00 2001 From: Philip Zembrod Date: Wed, 4 Nov 2020 20:40:55 +0100 Subject: [PATCH] Fix ConOut, curon/off and ROM mapping, yielding first X16 VolksForth that works on a first level. --- 6502/C64/cbmfiles/vf-lite-x16 | Bin 0 -> 13986 bytes 6502/C64/src/vf-sys-x16.fth | 69 +++++++++++++++++----------------- 2 files changed, 35 insertions(+), 34 deletions(-) create mode 100644 6502/C64/cbmfiles/vf-lite-x16 diff --git a/6502/C64/cbmfiles/vf-lite-x16 b/6502/C64/cbmfiles/vf-lite-x16 new file mode 100644 index 0000000000000000000000000000000000000000..ef859c690f8e74b9f3f0298e9e304b1122c23af7 GIT binary patch literal 13986 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 YVKfp=T!{4QZ{jTWH}bIBt3M(BKS(H|D*ylh literal 0 HcmV?d00001 diff --git a/6502/C64/src/vf-sys-x16.fth b/6502/C64/src/vf-sys-x16.fth index 25aa98b..45cb645 100644 --- a/6502/C64/src/vf-sys-x16.fth +++ b/6502/C64/src/vf-sys-x16.fth @@ -5,7 +5,7 @@ include vf-lbls-cbm.fth \ X16 labels -0fede >label console_put_char +0c28c >label ConOut 028c >label MsgFlg 028b >label OutDev 028a >label InDev @@ -17,7 +17,17 @@ include vf-lbls-cbm.fth 0381 >label CurFlg \ aka qtsw 0385 >label InsCnt \ aka insrt -Label ConOut clc console_put_char jmp +0ded1 >label BasicColdStart + +0debf >label BasicStackRstReady +\ 0deb7 >label BasicPanic +\ 0dec3 >label BasicReady +\ 0dece >label BasicNReady + +\ TODO(pzembrod): Remove once X16 VolksForth is stabilized enough. +Code (x16abort BasicStackRstReady jmp end-code +: x16abort cr ." x16abort" cr (x16abort ; + \ C64 labels that X16 doesn't have: @@ -52,35 +62,25 @@ Code getkey ( -- 8b) \ C64 curon curoff -00C837 >label screen_get_char_color -00C8CC >label screen_restore_state -00C8B4 >label screen_save_state -00C830 >label screen_set_char_color +\ 00C837 >label screen_get_char_color +\ 00C8CC >label screen_restore_state +\ 00C8B4 >label screen_save_state +\ 00C830 >label screen_set_char_color 037B >label blnsw \ C64: $cc - 037C >label blnct \ C64: $cd - 037D >label gdbln \ C64: $ce - 037E >label blnon \ C64: $cf - 0262 >label pnt \ C64: $d1 - 0380 >label pntr \ C64: $d3 - 0373 >label gdcol +\ 037C >label blnct \ C64: $cd +\ 037D >label gdbln \ C64: $ce +\ 037E >label blnon \ C64: $cf +\ 0262 >label pnt \ C64: $d1 +\ 0380 >label pntr \ C64: $d3 +\ 0373 >label gdcol + +09f60 >label via1pb Code curon ( --) -\ 0D3 ldy 0D1 )Y lda 0CE sta 0CC stx - screen_save_state jsr - pntr ldy screen_get_char_color jsr gdbln sta gdcol stx - 0 # ldx blnsw stx \ TODO: use stz - screen_restore_state jsr - xyNext jmp end-code + blnsw stx Next jmp end-code Code curoff ( --) -\ iny 0CC sty 0CD sty 0CF stx -\ 0CE lda 0D3 ldy 0D1 )Y sta -\ 1 # ldy Next jmp end-code - screen_save_state jsr - 2 # ldy blnsw sty blnct sty 0 # ldx blnon stx \ TODO: use stz - gdbln lda gdcol ldx pntr ldy screen_set_char_color jsr - screen_restore_state jsr - xyNext jmp end-code + blnsw sty Next jmp end-code include vf-sys-cbm.fth @@ -117,22 +117,23 @@ Label restore pha txa pha tya pha cld \ C64:Init 06nov87re -: init-system +: init-system \ TODO(pzembrod): Check if this works and is needed [ restore ] Literal $318 ! ; \ NMI-Vector Label first-init - sei cld \ $db c, \ for activating X16 monitor - IOINIT jsr CINT jsr RESTOR jsr - \ init. and set I/O-Vectors + sei cld + via1pb lda $f8 # and via1pb sta \ map in KERNAL ROM + IOINIT jsr CINT jsr RESTOR jsr \ init. and set I/O-Vectors ink-pot lda BrdCol sta \ border ink-pot 1+ lda BkgCol sta \ backgrnd ink-pot 2+ lda PenCol sta \ pen -\ $17 # lda $D018 sta \ low/upp + -\ 0 # lda $D01A sta \ VIC-IRQ off -\ $1B # lda $D011 sta \ Textmode on -\ 4 # lda $288 sta \ low screen + $0e # lda ConOut jsr \ lower/uppercase cli rts end-code first-init dup bootsystem 1+ ! warmboot 1+ ! Code c64init first-init jsr xyNext jmp end-code + +| CODE (bye + via1pb lda $f8 # and $4 # ora via1pb sta \ map in BASIC ROM + BasicColdStart jmp end-code