VolksForth/6502/mcs/VForth35/mcsio.fb
2020-07-16 22:54:56 +02:00

1 line
11 KiB
Plaintext

\ Mensch Computer System UI Definitions cas21jan07 1 9 +thru \ 65KEY? GETKEY 25JAN85RE) cas21jan07 | CODE 65KEY? CLC $FB C, $C2 C, $30 C, CLI $43 LDA 1 # AND $0 C, SEI SEC $FB C, push0a jmp end-code | CODE GETKEY ( -- 8b ) CLC $FB C, $C2 C, $30 C, CLI $22 C, $33 C, $E0 C, $00 C, SEI $E2 C, $30 C, SEC $FB C, NOP push0a jmp end-code | CODE CURON ( --) NEXT JMP END-CODE | CODE CUROFF ( --) NEXT JMP END-CODE : 65KEY ( -- 8B) CUROFF BEGIN PAUSE 65KEY? UNTIL GETKEY ; \ DECODE EXPECT KEYBOARD BP28MAY85) cs08aug0508 CONSTANT #BS $0D CONSTANT #CR &27 CONSTANT #ESC : 65DECODE ( ADDR CNT1 KEY -- ADDR CNT2) #BS CASE? IF DUP IF DEL 1- THEN EXIT THEN #CR CASE? IF DUP SPAN ! EXIT THEN >R 2DUP + R@ SWAP C! R> EMIT 1+ ; : 65EXPECT ( ADDR LEN1 -- ) SPAN ! 0 BEGIN DUP SPAN @ U< WHILE KEY DECODE REPEAT 2DROP SPACE ; INPUT: KEYBOARD [ HERE INPUT ! ] 65KEY 65KEY? 65DECODE 65EXPECT [ \ senden? (emit 65emit 25JAN85RE) cas21jan07 &80 CONSTANT C/L \ Char per Line &25 CONSTANT L/S \ Lines per Screen Code (emit ( 8b -- ) SP X) LDA CLC $FB C, $C2 C, $30 C, CLI $22 C, $63 C, $E0 C, $00 C, SEI $E2 C, $30 C, SEC $FB C, (drop jmp end-code \ EMIT CR DEL PAGE AT AT? 25JAN85RE) cas21jan07 | Variable out 0 out ! | &80 Constant c/row : 65emit ( 8b -- ) pause 1 out +! (emit ; : 65CR #CR 65emit out @ c/row / 1+ c/row * out ! ; : 65DEL #bs 65emit SPACE #bs 65emit -2 out +! ; : 65PAGE L/S 0 DO CR LOOP out off ; : 65at ( row col -- ) .( at einf. ) swap c/row * + out ! ; : 65AT? ( -- ROW COL ) out @ c/row /mod &24 min swap ; \ er14dez88 : 65type ( adr len -- ) bounds ?DO I c@ emit LOOP ; \ TYPE DISPLAY (BYE BP 28MAY85RE) cas21jan07 OUTPUT: DISPLAY [ HERE OUTPUT ! ] 65EMIT 65CR 65TYPE 65DEL 65PAGE 65AT 65AT? [ | code (bye CLC $FB C, $C2 C, $30 C, CLI $6B C, END-CODE CODE MON ( jumps to break vector ) CLC $FB C, $C2 C, $30 C, BRK BRK $E2 C, $30 C, SEC $FB C, XYNEXT JMP END-CODE \ L@ LC@ cas21jan07 CODE L@ ( 24addr -- 16b ) 2 # LDA SETUP JSR CLC $FB C, ( CLC XCE ) $C2 C, $30 C, ( REP #$30 ) $A7 C, N C, ( LDA [N] ) $E2 C, $30 C, ( SEP #$30 ) SEC $FB C, ( SEC XCE ) PHA $EB C, ( XBA ) PUSH JMP END-CODE CODE LC@ 2 # LDA SETUP JSR CLC $FB C, $A7 C, N C, SEC $FB C, PUSH0A JMP END-CODE \ L! LC! cas21jan07 CODE L! ( n 24addr -- ) 3 # LDA SETUP JSR CLC $FB C, ( CLC XCE ) $C2 C, $30 C, ( REP #$30 ) N 4+ LDA $87 C, N C, ( STA [N] ) $E2 C, $30 C, ( SEP #$30 ) SEC $FB C, ( SEC XCE ) XYNEXT JMP END-CODE CODE LC! ( c 24addr -- ) 3 # LDA SETUP JSR CLC $FB C, N 4+ LDA $87 C, N C, SEC $FB C, XYNEXT JMP END-CODE \ LTYPE LMOVE cas21jan07 : LTYPE ( 24addr len -- ) 0 ?DO 2DUP I + LC@ EMIT LOOP 2DROP ; CODE LMOVE ( from.24addr to.24addr len -- ) 5 # LDA SETUP JSR LABEL (LMV N 8 + LDA (LMV $19 + STA N 4 + LDA (LMV $18 + STA CLC $FB C, ( CLC XCE ) $C2 C, $30 C, ( REP #$30 ) N LDA $3A C, ( DEA ) N 2+ LDY N 6 + LDX BRK BRK $40 C, $00 C, $00 C, ( MVN 0,0 bank operators replaced ) BRK BRK $E2 C, $30 C, SEC $FB C, XYNEXT JMP END-CODE