From 80c4a990321545b3c80c624c4085990338352e84 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Fri, 17 Sep 2021 17:51:11 -0400 Subject: [PATCH] Update .po disk image. --- applecorn.po | Bin 819200 -> 819200 bytes applecorn.s | 2 + auxmem.bytwrd.s | 2 + auxmem.chario.s | 900 ++++++++++++++++++++++++------------------------ auxmem.hostfs.s | 2 + auxmem.init.s | 6 +- auxmem.misc.s | 2 + auxmem.mosequ.s | 2 + auxmem.oscli.s | 2 + auxmem.vdu.s | 2 + mainmem.fsequ.s | 2 + mainmem.init.s | 2 + mainmem.ldr.s | 2 + mainmem.lists.s | 2 + mainmem.menu.s | 2 + mainmem.misc.s | 2 + mainmem.path.s | 4 +- mainmem.svc.s | 2 + mainmem.wild.s | 2 + 19 files changed, 485 insertions(+), 455 deletions(-) diff --git a/applecorn.po b/applecorn.po index 2ae2949c1d2edea6a0e23ada8de26cc828d67386..411f9f3de3bc0c02adb49dd1817fce1470364296 100644 GIT binary patch delta 6018 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 delta 5334 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 Nf}4kP*Wmo_{{l61C!GKQ diff --git a/applecorn.s b/applecorn.s index 572f4db..1918910 100644 --- a/applecorn.s +++ b/applecorn.s @@ -202,3 +202,5 @@ MAINZP MAC + + diff --git a/auxmem.bytwrd.s b/auxmem.bytwrd.s index 17e708b..3c720dc 100644 --- a/auxmem.bytwrd.s +++ b/auxmem.bytwrd.s @@ -472,3 +472,5 @@ OSBM2 ASC ').' + + diff --git a/auxmem.chario.s b/auxmem.chario.s index 458c7d2..eed77ba 100644 --- a/auxmem.chario.s +++ b/auxmem.chario.s @@ -1,449 +1,451 @@ -* AUXMEM.CHARIO.S -* (c) Bobbi 2021 GPLv3 -* -* AppleMOS Character I/O - - -* KERNEL/CHARIO.S -***************** -* Character read and write -* -* 14-Aug-2021 Flashing cursor and INKEY sync'd to frame rate -* with VBLK. Ensured cursor turned on straightaway. -* 15-Aug-2021 Cursor keys move copy cursor, copy reads char. -* Copy cursor not visible yet. -* 16-Aug-2021 Copy cursor and Edit cursor visible. -* 17-Aug-2021 OSBYTE 4 for cursors, OSBYTE 221-228 for topbit -* keys. -* 21-Aug-2021 FIXED: If screen scrolls, copy cursor ends on -* wrong line. -* FIXED: KBDREAD has several paths that don't -* test ESCHAR. -* FIXED: INKEY doesn't restore cursor on timeout. -* The three separate cursors can be set seperately. -* 02-Sep-2021 INKEY-256 tests Apple IIe vs IIc. -* 05-Sep-2021 KBDINIT returns startup value to pass to VDUINT. -* 09-Sep-2021 Moved keyboard OSBYTEs to here. -* 12-Sep-2021 COPY calls new VDU entry point. -* 15-Sep-2021 INKEY(0) tests once and returns immediately. - -* TO DO: move these to VDU -OLDCHAR EQU OSKBD1 ; *TEMP* ; character under cursor -* COPYCHAR EQU OSKBD2 ; *TEMP* ; character under copy cursor - -FLASHER EQU BYTEVARBASE+176 ; VSync counter for flashing cursor -FXEXEC EQU BYTEVARBASE+198 -FXSPOOL EQU BYTEVARBASE+199 - -FXTABCHAR EQU BYTEVARBASE+219 -FXESCCHAR EQU BYTEVARBASE+220 -FXKEYBASE EQU BYTEVARBASE+221 -FXESCON EQU BYTEVARBASE+229 -FXESCEFFECT EQU BYTEVARBASE+230 -FX200VAR EQU BYTEVARBASE+200 -FX254VAR EQU BYTEVARBASE+254 -FX2VAR EQU BYTEVARBASE+$B1 -FX3VAR EQU BYTEVARBASE+$EC -FX4VAR EQU BYTEVARBASE+$ED - - -* OSWRCH handler -**************** -* Send a character to current output -* All registers preserved -* -WRCHHND PHA - PHX - PHY -* TO DO Check any output redirections -* TSX -* LDA $103,X -* PHA - - JSR OUTCHAR -* TO DO Check any printer output -* BCC WRCHHND3 -* PLA -* PHA -* JSR PRNCHAR -* WRCHHND3 - -* TO DO Check any spool output -* LDY FXSPOOL -* BEQ WRCHHND4 -* PLA -* PHA -* JSR OSBPUT -* WRCHHND4 -* PLA -* - PLY - PLX - PLA - RTS - - -* Character Input -***************** -* Default keyboard OSBYTE variables -*DEFBYTELOW EQU 219 ; First default OSBYTE value -*DEFBYTE DB $09,$1B ; Default key codes -* DB $01,$D0,$E0,$F0 ; Default key expansion -* DB $01,$80,$90,$00 ; Default key expansion -*DEFBYTEEND - -* TEMP as no *KEY -* Default keyboard OSBYTE variables -DEFBYTELOW EQU 219 ; First default OSBYTE value -DEFBYTE DB $09,$1B ; Default key codes - DB $C0,$D0,$E0,$F0 ; Default key expansion - DB $80,$90,$A0,$B0 ; Default key expansion -DEFBYTEEND - -KBDINIT LDX #DEFBYTEEND-DEFBYTE-1 -:KBDINITLP LDA DEFBYTE,X ; Initialise KBD OSBYTE variables - STA BYTEVARBASE+DEFBYTELOW,X - DEX - BPL :KBDINITLP - LDX #$C0 - STX FX254VAR ; b7-b4=default KBD map, b3-b0=default MODE - BIT SETV - JSR KBDTEST - BCS :KBDINITOK ; Return default MODE=0 - STA $C010 ; Ack. keypress - TAX ; Use keypress as default MODE -:KBDINITOK TXA - RTS - -* OSRDCH/INKEY handler -********************** -* Read a character from current input -* All registers preserved except A, Carry -* Flashes a soft cursor while waiting for input -* -RDCHHND LDA #$80 ; flag=wait forever - PHY - TAY - BRA INKEYGO ; Wait forever for input - -* XY<$8000 - wait for a keypress -INKEY PHY ; Dummy PHY to balance RDCH -INKEYGO PHX ; Save registers - PHY - BIT VDUSTATUS ; Enable editing cursor - BVC INKEYGO2 ; No editing cursor - JSR GETCHRC ; Get character under cursor - STA COPYCHAR ; Save char under edit cursor - LDA CURSORED - JSR PUTCHRC ; Display edit cursor - JSR COPYSWAP1 ; Swap to copy cursor -INKEYGO2 JSR GETCHRC ; Get character under cursor - STA OLDCHAR - CLI - BRA INKEY1 ; Turn cursor on - -INKEYLP CLC - LDA #$01 ; Slow flash, every 32 frames - BIT VDUSTATUS - BVC INKEY0 - ASL A ; Fast flash, every 16 frames -INKEY0 ADC FLASHER - STA FLASHER - AND #15 - BNE INKEY3 ; Not time to toggle yet - LDA OLDCHAR ; Prepare to remove cursor - BIT FLASHER - BMI INKEY2 ; Remove cursor -INKEY1 LDA CURSOR ; Add cursor - BIT VDUSTATUS - BVC INKEY2 - LDA CURSORCP -INKEY2 JSR PUTCHRC ; Toggle cursor -INKEY3 LDA ESCFLAG - BMI INKEYOK ; Escape pending, return it -INKEY4 JSR KEYREAD ; Test for input, all can be trashed - PLY - BCC INKEYOK ; Char returned, return it - BMI INKEY6 ; Loop forever, skip countdown - PLX - BNE INKEY5 - TYA - BEQ INKEYOUT ; XY=0, timed out - DEY ; 16-bit decrement -INKEY5 DEX - PHX -INKEY6 PHY -* -* VBLK pulses at 50Hz/60Hz, toggles at 100Hz/120Hz - LDX $C019 ; Get initial VBLK state -INKEY8 BIT $C000 - BMI INKEY4 ; Key pressed - TXA - EOR $C019 - BPL INKEY8 ; Wait for VBLK change - BMI INKEYLP ; Loop back to key test - -INKEYOUT PLA ; Drop stacked Y - LDA #$FF ; Prepare to stack $FF -* -INKEYOK PHA ; Save key or timeout - PHP ; Save CC=key, CS=timeout - LDA OLDCHAR ; Prepare for main cursor - BIT VDUSTATUS - BVC INKEYOFF2 ; No editing cursor - JSR PUTCHRC ; Remove cursor - JSR COPYSWAP1 ; Swap cursor back - LDA COPYCHAR ; Remove main cursor -INKEYOFF2 JSR PUTCHRC ; Remove cursor -* - PLP - BCS INKEYOK3 ; Timeout - LDA ESCFLAG ; Keypress, test for Escape - ASL A ; Cy=Escape flag - PLA ; Get char back - PLX ; Restore X,Y for key pressed -INKEYOK3 PLY ; Or pop TimeOut - RTS -* RDCH Character read: CC, A=char, X=restored, Y=restored -* RDCH Escape: CS, A=char, X=restored, Y=restored -* INKEY Character read: CC, A=char, X=???, Y<$80 -* INKEY Escape: CS, A=char, X=???, Y<$80 -* INKEY Timeout: CS, A=???, X=???, Y=$FF - - -BYTE81 TYA - BMI NEGINKEY ; XY<0, scan for keypress - JSR INKEY ; XY>=0, wait for keypress -* Character read: CC, A=char, X=???, Y<$80 -* Escape: CS, A=char, X=???, Y<$80 -* Timeout: CS, A=???, X=???, Y=$FF - TAX ; X=character returned - TYA - BMI BYTE81DONE ; Y=$FF, timeout - LDY #$00 - BCC BYTE81DONE ; CC, not Escape - LDY #$1B ; Y=27 -BYTE81DONE RTS -* Returns: Y=$FF, X=???, CS - timeout -* Y=$1B, X=???, CS - escape -* Y=$00, X=char, CC - keypress - - -NEGINKEY CPX #$01 - LDX #$00 ; Unimplemented - BCS NEGINKEY0 - - JSR NEGCALL ; Read machine ID from aux - TAX ; *TEST* - BIT $E0 ; *TEST* - BVS NEGINKEY1 ; *TEST* - LDX #$2C - TAY - BEQ NEGINKEY0 ; $00 = Apple IIc -> INKEY-256 = $2C - LDX #$2E - AND #$0F - BEQ NEGINKEY0 ; $x0 = Apple IIe -> INKEY-256 = $2E - LDX #$2A ; else = Apple IIgs -> INKEY-256 = $2A -NEGINKEY0 LDY #$00 -NEGINKEY1 CLC - RTS - -NEGCALL >>> XF2MAIN,MACHRD ; Try to read Machine ID - - -* KERNEL/KEYBOARD.S -******************* - -* KEYREAD -************************ -* Test for and read from input, -* expanding keyboard special keys -* -* On exit, CS=no keypress -* CC=keypress -* A =keycode, X,Y=corrupted -KEYREAD -* TO DO: check *EXEC source -* LDY FXEXEC -* BEQ KEYREAD1 -* JSR OSBGET -* BCC KEYREADOK -* LDA #0 -* STA FXVAREXEC -* JSR OSFIND -* KEYREAD1 -* -* TO DO: expand current soft key -* LDA SOFTKEYLEN -* BEQ KEYREAD2 -* LDX SOFTKEYOFF -* LDA SOFTKEYS,X -* INC SOFTKEYOFF -* DEC SOFTKEYLEN -* CLC -* RTS -* KEYREAD2 -* - JSR KBDREAD ; Fetch character from KBD "buffer" - BCS KEYREADOK ; Nothing pending -* - TAY - BPL KEYREADOK ; Not top-bit key - AND #$CF - CMP #$C9 - BCC KEYSOFT ; Not cursor key - LDX FX4VAR - BEQ KEYCURSOR ; *FX4,0 - editing keys - DEX - BNE KEYSOFT1 ; Not *FX4,1 - soft key - LDY FXTABCHAR - CMP #$C9 - BEQ KEYREADOKY ; TAB key - SBC #$44 ; Return $88-$8B - TAY -KEYREADOKY TYA -KEYREADOK1 CLC -KEYREADOK RTS -* -* Process soft key -KEYSOFT1 LDX FX254VAR - CPX #$C0 - BCC KEYSOFT - AND #$BF - TAY -KEYSOFT TYA - LSR A - LSR A - LSR A - LSR A ; A=key DIV 16 - EOR #$04 ; Offset into KEYBASE - TAX - LDA FXKEYBASE-8,X -* TO DO: -*BEQ KEYNONE ; $00=ignored -*DEC A -*BEQ expandfunction - CMP #2 ; *TEMP* - BCC KEYNONE ; *TEMP* - TYA - AND #$0F - CLC - ADC FXKEYBASE-8,X - CLC - RTS - -* Process cursor keys -KEYCURSOR CMP #$C9 - BEQ KEYCOPY - PHA - LDA OLDCHAR - JSR PUTCHRC ; Remove cursor - PLA - JSR COPYMOVE ; Move copy cursor - JSR GETCHRC ; Save char under cursor - STA OLDCHAR -KEYNONE SEC - RTS - -KEYCOPY LDA FXTABCHAR ; Prepare TAB if no copy cursor - BIT VDUSTATUS - BVC KEYREADOK1 ; No copy cursor, return TAB - LDA OLDCHAR ; Get the char under cursor - PHA - JSR OUTCHARCP ; Output it to restore and move cursor - JSR GETCHRC ; Save char under cursor - STA OLDCHAR - PLA - BNE KEYREADOK1 ; Ok character - SEC - JMP BEEP ; Beep and return CS=No char - - -* KBDREAD -************************ -* Test for and fetch key from keyboard -* -* On exit, CS=no keypress -* CC=keypress -* A =keycode, X=corrupted -* Apple+Letter -> Ctrl+Letter -* Apple+Digits -> 80+x, 90+x, A0+x -* TAB -> $C9 -* Cursors -> $CC-$CF -* -KBDREAD CLV ; VC=return keypress -KBDTEST LDA $C000 ; VS here to test for keypress - EOR #$80 ; Toggle bit 7 - CMP #$80 - BCS KBDDONE ; No key pressed - BVS KBDDONE ; VS=test for keypress - STA $C010 ; Ack. keypress - BIT $C061 - BMI KBDLALT ; Left Apple pressed - BIT $C062 - BMI KBDRALT ; Right Apple pressed - CMP #$09 - BEQ KBDTAB ; TAB is dual action TAB/COPY - CMP #$08 - BCC KBDCHKESC ; <$08 not cursor key - CMP #$0C - BCC KBDCURSR ; $08-$0B are cursor keys - CMP #$15 - BNE KBDCHKESC ; $15 is cursor key -* -KBDCUR15 LDA #$0D ; Convert RGT to $09 -KBDTAB SBC #$04 ; Convert TAB to &C9 -KBDCURSR CLC - ADC #$C4 ; Cursor keys $C0+x - BRA KBDCHKESC - -KBDRALT ; Right Apple key pressed -KBDLALT CMP #$40 ; Left Apple key pressed - BCS KBDCTRL - CMP #$30 - BCC KBDCHKESC ; <'0' - CMP #$3A - BCS KBDCHKESC ; >'9' -KBDFUNC AND #$0F ; Convert Apple-Num to function key - ORA #$80 - BIT $C062 - BPL KBDCHKESC ; Left+Digit -> $8x - ORA #$90 ; Right+Digit -> $9x - BIT $C061 - BPL KBDCHKESC - EOR #$30 ; Left+Right+Digit -> $Ax - BRA KBDCHKESC - -KBDCTRL AND #$1F ; Apple-Letter -> Ctrl-Letter -* -* Test for Escape key -KBDCHKESC TAX ; X=keycode - EOR FXESCCHAR ; Current ESCAPE char? - ORA FXESCON ; Is ESCAPE an ASCII char? - BNE KBDNOESC ; Not ESCAPE or ESCAPE=ASCII - LDA FX200VAR ; Is ESCAPE ignored? - LSR A ; Check bit 0 - BCS KBDDONE ; ESCAPE completely ignored - SEC - ROR ESCFLAG ; Set Escape flag -KBDNOESC TXA ; A=keycode - CLC ; CLC=Ok -KBDDONE RTS - -* Process pending Escape state -BYTE7E LDX #$00 ; $7E = ack detection of ESC - BIT ESCFLAG - BPL BYTE7DOK ; No Escape pending - LDA FXESCEFFECT ; Process Escape effects - BEQ BYTE7E2 - CLI ; Allow IRQs while flushing - STA FXLINES ; Clear scroll counter -* JSR STAREXEC0 ; Close any EXEC file -* JSR FLUSHALL ; Flush all buffers -BYTE7E2 LDX #$FF ; X=$FF, Escape was pending -BYTE7C CLC ; &7C = clear escape condition -BYTE7D ROR ESCFLAG ; $7D = set escape condition -BYTE7DOK RTS - -BYTE76 LDX #$00 ; Update LEDs and return X=SHIFT - RTS ; Not possible with Apple +* AUXMEM.CHARIO.S +* (c) Bobbi 2021 GPLv3 +* +* AppleMOS Character I/O + + +* KERNEL/CHARIO.S +***************** +* Character read and write +* +* 14-Aug-2021 Flashing cursor and INKEY sync'd to frame rate +* with VBLK. Ensured cursor turned on straightaway. +* 15-Aug-2021 Cursor keys move copy cursor, copy reads char. +* Copy cursor not visible yet. +* 16-Aug-2021 Copy cursor and Edit cursor visible. +* 17-Aug-2021 OSBYTE 4 for cursors, OSBYTE 221-228 for topbit +* keys. +* 21-Aug-2021 FIXED: If screen scrolls, copy cursor ends on +* wrong line. +* FIXED: KBDREAD has several paths that don't +* test ESCHAR. +* FIXED: INKEY doesn't restore cursor on timeout. +* The three separate cursors can be set seperately. +* 02-Sep-2021 INKEY-256 tests Apple IIe vs IIc. +* 05-Sep-2021 KBDINIT returns startup value to pass to VDUINT. +* 09-Sep-2021 Moved keyboard OSBYTEs to here. +* 12-Sep-2021 COPY calls new VDU entry point. +* 15-Sep-2021 INKEY(0) tests once and returns immediately. + +* TO DO: move these to VDU +OLDCHAR EQU OSKBD1 ; *TEMP* ; character under cursor +* COPYCHAR EQU OSKBD2 ; *TEMP* ; character under copy cursor + +FLASHER EQU BYTEVARBASE+176 ; VSync counter for flashing cursor +FXEXEC EQU BYTEVARBASE+198 +FXSPOOL EQU BYTEVARBASE+199 + +FXTABCHAR EQU BYTEVARBASE+219 +FXESCCHAR EQU BYTEVARBASE+220 +FXKEYBASE EQU BYTEVARBASE+221 +FXESCON EQU BYTEVARBASE+229 +FXESCEFFECT EQU BYTEVARBASE+230 +FX200VAR EQU BYTEVARBASE+200 +FX254VAR EQU BYTEVARBASE+254 +FX2VAR EQU BYTEVARBASE+$B1 +FX3VAR EQU BYTEVARBASE+$EC +FX4VAR EQU BYTEVARBASE+$ED + + +* OSWRCH handler +**************** +* Send a character to current output +* All registers preserved +* +WRCHHND PHA + PHX + PHY +* TO DO Check any output redirections +* TSX +* LDA $103,X +* PHA + + JSR OUTCHAR +* TO DO Check any printer output +* BCC WRCHHND3 +* PLA +* PHA +* JSR PRNCHAR +* WRCHHND3 + +* TO DO Check any spool output +* LDY FXSPOOL +* BEQ WRCHHND4 +* PLA +* PHA +* JSR OSBPUT +* WRCHHND4 +* PLA +* + PLY + PLX + PLA + RTS + + +* Character Input +***************** +* Default keyboard OSBYTE variables +*DEFBYTELOW EQU 219 ; First default OSBYTE value +*DEFBYTE DB $09,$1B ; Default key codes +* DB $01,$D0,$E0,$F0 ; Default key expansion +* DB $01,$80,$90,$00 ; Default key expansion +*DEFBYTEEND + +* TEMP as no *KEY +* Default keyboard OSBYTE variables +DEFBYTELOW EQU 219 ; First default OSBYTE value +DEFBYTE DB $09,$1B ; Default key codes + DB $C0,$D0,$E0,$F0 ; Default key expansion + DB $80,$90,$A0,$B0 ; Default key expansion +DEFBYTEEND + +KBDINIT LDX #DEFBYTEEND-DEFBYTE-1 +:KBDINITLP LDA DEFBYTE,X ; Initialise KBD OSBYTE variables + STA BYTEVARBASE+DEFBYTELOW,X + DEX + BPL :KBDINITLP + LDX #$C0 + STX FX254VAR ; b7-b4=default KBD map, b3-b0=default MODE + BIT SETV + JSR KBDTEST + BCS :KBDINITOK ; Return default MODE=0 + STA $C010 ; Ack. keypress + TAX ; Use keypress as default MODE +:KBDINITOK TXA + RTS + +* OSRDCH/INKEY handler +********************** +* Read a character from current input +* All registers preserved except A, Carry +* Flashes a soft cursor while waiting for input +* +RDCHHND LDA #$80 ; flag=wait forever + PHY + TAY + BRA INKEYGO ; Wait forever for input + +* XY<$8000 - wait for a keypress +INKEY PHY ; Dummy PHY to balance RDCH +INKEYGO PHX ; Save registers + PHY + BIT VDUSTATUS ; Enable editing cursor + BVC INKEYGO2 ; No editing cursor + JSR GETCHRC ; Get character under cursor + STA COPYCHAR ; Save char under edit cursor + LDA CURSORED + JSR PUTCHRC ; Display edit cursor + JSR COPYSWAP1 ; Swap to copy cursor +INKEYGO2 JSR GETCHRC ; Get character under cursor + STA OLDCHAR + CLI + BRA INKEY1 ; Turn cursor on + +INKEYLP CLC + LDA #$01 ; Slow flash, every 32 frames + BIT VDUSTATUS + BVC INKEY0 + ASL A ; Fast flash, every 16 frames +INKEY0 ADC FLASHER + STA FLASHER + AND #15 + BNE INKEY3 ; Not time to toggle yet + LDA OLDCHAR ; Prepare to remove cursor + BIT FLASHER + BMI INKEY2 ; Remove cursor +INKEY1 LDA CURSOR ; Add cursor + BIT VDUSTATUS + BVC INKEY2 + LDA CURSORCP +INKEY2 JSR PUTCHRC ; Toggle cursor +INKEY3 LDA ESCFLAG + BMI INKEYOK ; Escape pending, return it +INKEY4 JSR KEYREAD ; Test for input, all can be trashed + PLY + BCC INKEYOK ; Char returned, return it + BMI INKEY6 ; Loop forever, skip countdown + PLX + BNE INKEY5 + TYA + BEQ INKEYOUT ; XY=0, timed out + DEY ; 16-bit decrement +INKEY5 DEX + PHX +INKEY6 PHY +* +* VBLK pulses at 50Hz/60Hz, toggles at 100Hz/120Hz + LDX $C019 ; Get initial VBLK state +INKEY8 BIT $C000 + BMI INKEY4 ; Key pressed + TXA + EOR $C019 + BPL INKEY8 ; Wait for VBLK change + BMI INKEYLP ; Loop back to key test + +INKEYOUT PLA ; Drop stacked Y + LDA #$FF ; Prepare to stack $FF +* +INKEYOK PHA ; Save key or timeout + PHP ; Save CC=key, CS=timeout + LDA OLDCHAR ; Prepare for main cursor + BIT VDUSTATUS + BVC INKEYOFF2 ; No editing cursor + JSR PUTCHRC ; Remove cursor + JSR COPYSWAP1 ; Swap cursor back + LDA COPYCHAR ; Remove main cursor +INKEYOFF2 JSR PUTCHRC ; Remove cursor +* + PLP + BCS INKEYOK3 ; Timeout + LDA ESCFLAG ; Keypress, test for Escape + ASL A ; Cy=Escape flag + PLA ; Get char back + PLX ; Restore X,Y for key pressed +INKEYOK3 PLY ; Or pop TimeOut + RTS +* RDCH Character read: CC, A=char, X=restored, Y=restored +* RDCH Escape: CS, A=char, X=restored, Y=restored +* INKEY Character read: CC, A=char, X=???, Y<$80 +* INKEY Escape: CS, A=char, X=???, Y<$80 +* INKEY Timeout: CS, A=???, X=???, Y=$FF + + +BYTE81 TYA + BMI NEGINKEY ; XY<0, scan for keypress + JSR INKEY ; XY>=0, wait for keypress +* Character read: CC, A=char, X=???, Y<$80 +* Escape: CS, A=char, X=???, Y<$80 +* Timeout: CS, A=???, X=???, Y=$FF + TAX ; X=character returned + TYA + BMI BYTE81DONE ; Y=$FF, timeout + LDY #$00 + BCC BYTE81DONE ; CC, not Escape + LDY #$1B ; Y=27 +BYTE81DONE RTS +* Returns: Y=$FF, X=???, CS - timeout +* Y=$1B, X=???, CS - escape +* Y=$00, X=char, CC - keypress + + +NEGINKEY CPX #$01 + LDX #$00 ; Unimplemented + BCS NEGINKEY0 + + JSR NEGCALL ; Read machine ID from aux + TAX ; *TEST* + BIT $E0 ; *TEST* + BVS NEGINKEY1 ; *TEST* + LDX #$2C + TAY + BEQ NEGINKEY0 ; $00 = Apple IIc -> INKEY-256 = $2C + LDX #$2E + AND #$0F + BEQ NEGINKEY0 ; $x0 = Apple IIe -> INKEY-256 = $2E + LDX #$2A ; else = Apple IIgs -> INKEY-256 = $2A +NEGINKEY0 LDY #$00 +NEGINKEY1 CLC + RTS + +NEGCALL >>> XF2MAIN,MACHRD ; Try to read Machine ID + + +* KERNEL/KEYBOARD.S +******************* + +* KEYREAD +************************ +* Test for and read from input, +* expanding keyboard special keys +* +* On exit, CS=no keypress +* CC=keypress +* A =keycode, X,Y=corrupted +KEYREAD +* TO DO: check *EXEC source +* LDY FXEXEC +* BEQ KEYREAD1 +* JSR OSBGET +* BCC KEYREADOK +* LDA #0 +* STA FXVAREXEC +* JSR OSFIND +* KEYREAD1 +* +* TO DO: expand current soft key +* LDA SOFTKEYLEN +* BEQ KEYREAD2 +* LDX SOFTKEYOFF +* LDA SOFTKEYS,X +* INC SOFTKEYOFF +* DEC SOFTKEYLEN +* CLC +* RTS +* KEYREAD2 +* + JSR KBDREAD ; Fetch character from KBD "buffer" + BCS KEYREADOK ; Nothing pending +* + TAY + BPL KEYREADOK ; Not top-bit key + AND #$CF + CMP #$C9 + BCC KEYSOFT ; Not cursor key + LDX FX4VAR + BEQ KEYCURSOR ; *FX4,0 - editing keys + DEX + BNE KEYSOFT1 ; Not *FX4,1 - soft key + LDY FXTABCHAR + CMP #$C9 + BEQ KEYREADOKY ; TAB key + SBC #$44 ; Return $88-$8B + TAY +KEYREADOKY TYA +KEYREADOK1 CLC +KEYREADOK RTS +* +* Process soft key +KEYSOFT1 LDX FX254VAR + CPX #$C0 + BCC KEYSOFT + AND #$BF + TAY +KEYSOFT TYA + LSR A + LSR A + LSR A + LSR A ; A=key DIV 16 + EOR #$04 ; Offset into KEYBASE + TAX + LDA FXKEYBASE-8,X +* TO DO: +*BEQ KEYNONE ; $00=ignored +*DEC A +*BEQ expandfunction + CMP #2 ; *TEMP* + BCC KEYNONE ; *TEMP* + TYA + AND #$0F + CLC + ADC FXKEYBASE-8,X + CLC + RTS + +* Process cursor keys +KEYCURSOR CMP #$C9 + BEQ KEYCOPY + PHA + LDA OLDCHAR + JSR PUTCHRC ; Remove cursor + PLA + JSR COPYMOVE ; Move copy cursor + JSR GETCHRC ; Save char under cursor + STA OLDCHAR +KEYNONE SEC + RTS + +KEYCOPY LDA FXTABCHAR ; Prepare TAB if no copy cursor + BIT VDUSTATUS + BVC KEYREADOK1 ; No copy cursor, return TAB + LDA OLDCHAR ; Get the char under cursor + PHA + JSR OUTCHARCP ; Output it to restore and move cursor + JSR GETCHRC ; Save char under cursor + STA OLDCHAR + PLA + BNE KEYREADOK1 ; Ok character + SEC + JMP BEEP ; Beep and return CS=No char + + +* KBDREAD +************************ +* Test for and fetch key from keyboard +* +* On exit, CS=no keypress +* CC=keypress +* A =keycode, X=corrupted +* Apple+Letter -> Ctrl+Letter +* Apple+Digits -> 80+x, 90+x, A0+x +* TAB -> $C9 +* Cursors -> $CC-$CF +* +KBDREAD CLV ; VC=return keypress +KBDTEST LDA $C000 ; VS here to test for keypress + EOR #$80 ; Toggle bit 7 + CMP #$80 + BCS KBDDONE ; No key pressed + BVS KBDDONE ; VS=test for keypress + STA $C010 ; Ack. keypress + BIT $C061 + BMI KBDLALT ; Left Apple pressed + BIT $C062 + BMI KBDRALT ; Right Apple pressed + CMP #$09 + BEQ KBDTAB ; TAB is dual action TAB/COPY + CMP #$08 + BCC KBDCHKESC ; <$08 not cursor key + CMP #$0C + BCC KBDCURSR ; $08-$0B are cursor keys + CMP #$15 + BNE KBDCHKESC ; $15 is cursor key +* +KBDCUR15 LDA #$0D ; Convert RGT to $09 +KBDTAB SBC #$04 ; Convert TAB to &C9 +KBDCURSR CLC + ADC #$C4 ; Cursor keys $C0+x + BRA KBDCHKESC + +KBDRALT ; Right Apple key pressed +KBDLALT CMP #$40 ; Left Apple key pressed + BCS KBDCTRL + CMP #$30 + BCC KBDCHKESC ; <'0' + CMP #$3A + BCS KBDCHKESC ; >'9' +KBDFUNC AND #$0F ; Convert Apple-Num to function key + ORA #$80 + BIT $C062 + BPL KBDCHKESC ; Left+Digit -> $8x + ORA #$90 ; Right+Digit -> $9x + BIT $C061 + BPL KBDCHKESC + EOR #$30 ; Left+Right+Digit -> $Ax + BRA KBDCHKESC + +KBDCTRL AND #$1F ; Apple-Letter -> Ctrl-Letter +* +* Test for Escape key +KBDCHKESC TAX ; X=keycode + EOR FXESCCHAR ; Current ESCAPE char? + ORA FXESCON ; Is ESCAPE an ASCII char? + BNE KBDNOESC ; Not ESCAPE or ESCAPE=ASCII + LDA FX200VAR ; Is ESCAPE ignored? + LSR A ; Check bit 0 + BCS KBDDONE ; ESCAPE completely ignored + SEC + ROR ESCFLAG ; Set Escape flag +KBDNOESC TXA ; A=keycode + CLC ; CLC=Ok +KBDDONE RTS + +* Process pending Escape state +BYTE7E LDX #$00 ; $7E = ack detection of ESC + BIT ESCFLAG + BPL BYTE7DOK ; No Escape pending + LDA FXESCEFFECT ; Process Escape effects + BEQ BYTE7E2 + CLI ; Allow IRQs while flushing + STA FXLINES ; Clear scroll counter +* JSR STAREXEC0 ; Close any EXEC file +* JSR FLUSHALL ; Flush all buffers +BYTE7E2 LDX #$FF ; X=$FF, Escape was pending +BYTE7C CLC ; &7C = clear escape condition +BYTE7D ROR ESCFLAG ; $7D = set escape condition +BYTE7DOK RTS + +BYTE76 LDX #$00 ; Update LEDs and return X=SHIFT + RTS ; Not possible with Apple + + diff --git a/auxmem.hostfs.s b/auxmem.hostfs.s index 50da210..1e5cb37 100644 --- a/auxmem.hostfs.s +++ b/auxmem.hostfs.s @@ -946,6 +946,8 @@ ERROR2E DW $C800 + + diff --git a/auxmem.init.s b/auxmem.init.s index e26412a..169be3c 100644 --- a/auxmem.init.s +++ b/auxmem.init.s @@ -177,10 +177,6 @@ BYTE00XX BEQ BYTE00A ; OSBYTE 0,0 - generate error RTS ; %000x1xxx host type, 'A'pple BYTE00A BRK DB $F7 -HELLO ASC 'Applecorn MOS 2021-09-16 snapshot' +HELLO ASC 'Applecorn MOS 2021-09-17' DB $00 ; Unify MOS messages - - - - diff --git a/auxmem.misc.s b/auxmem.misc.s index eeb903a..2bd48bb 100644 --- a/auxmem.misc.s +++ b/auxmem.misc.s @@ -497,6 +497,8 @@ AUXBLK ASC '**ENDOFCODE**' + + diff --git a/auxmem.mosequ.s b/auxmem.mosequ.s index 08fa0bf..8a59b97 100644 --- a/auxmem.mosequ.s +++ b/auxmem.mosequ.s @@ -68,3 +68,5 @@ COPYCHAR EQU OSKBD2 ; ** TEMP ** * $0300-$03DF * $03E0-$03FF Used for interfacing with ProDOS XFER + + diff --git a/auxmem.oscli.s b/auxmem.oscli.s index a638503..1b3022b 100644 --- a/auxmem.oscli.s +++ b/auxmem.oscli.s @@ -531,3 +531,5 @@ ECHOLP1 JSR GSREAD + + diff --git a/auxmem.vdu.s b/auxmem.vdu.s index f3f389a..fb89df7 100644 --- a/auxmem.vdu.s +++ b/auxmem.vdu.s @@ -623,3 +623,5 @@ BYTEA0 LDY #79 ; Read VDU variable $09,$0A + + diff --git a/mainmem.fsequ.s b/mainmem.fsequ.s index 4a1042e..87c6725 100644 --- a/mainmem.fsequ.s +++ b/mainmem.fsequ.s @@ -62,3 +62,5 @@ GEOFCMD EQU $D1 + + diff --git a/mainmem.init.s b/mainmem.init.s index 87553cb..5bda82e 100644 --- a/mainmem.init.s +++ b/mainmem.init.s @@ -107,4 +107,6 @@ RESET TSX + + diff --git a/mainmem.ldr.s b/mainmem.ldr.s index 4a0290d..0987dd4 100644 --- a/mainmem.ldr.s +++ b/mainmem.ldr.s @@ -134,6 +134,8 @@ CANTOPEN ASC "Unable to open ROM file" + + diff --git a/mainmem.lists.s b/mainmem.lists.s index 98ca98b..f6e2fab 100644 --- a/mainmem.lists.s +++ b/mainmem.lists.s @@ -126,3 +126,5 @@ QUITPL HEX 04 ; Number of parameters + + diff --git a/mainmem.menu.s b/mainmem.menu.s index 22e91a4..dd11e58 100644 --- a/mainmem.menu.s +++ b/mainmem.menu.s @@ -140,6 +140,8 @@ ROM8 STR "USERROM2.ROM" + + diff --git a/mainmem.misc.s b/mainmem.misc.s index c757a1d..6d4f257 100644 --- a/mainmem.misc.s +++ b/mainmem.misc.s @@ -188,5 +188,7 @@ FILEREFS DB $00,$00,$00,$00 + + diff --git a/mainmem.path.s b/mainmem.path.s index fb575bd..0d82de4 100644 --- a/mainmem.path.s +++ b/mainmem.path.s @@ -41,7 +41,7 @@ PREPATH LDX MOSFILE ; Length :NOTCOLN JSR GETPREF ; Current pfx -> PREFIX :REENTER LDA MOSFILE+1 ; First char of dirname CMP #'@' ; '@' means current working dir - BEQ :CWD + BEQ :CWD CMP #'^' ; '^' means parent dir BEQ :CARET CMP #'/' ; Absolute path @@ -307,3 +307,5 @@ PREFIX DS 65 ; Buffer for ProDOS prefix + + diff --git a/mainmem.svc.s b/mainmem.svc.s index a6593f4..7713377 100644 --- a/mainmem.svc.s +++ b/mainmem.svc.s @@ -1060,3 +1060,5 @@ MAINRDEXIT >>> XF2AUX,NULLRTS ; Back to an RTS + + diff --git a/mainmem.wild.s b/mainmem.wild.s index 4679e8d..8e5f5b1 100644 --- a/mainmem.wild.s +++ b/mainmem.wild.s @@ -384,3 +384,5 @@ MATCHBUF DS 65 ; For storing match results (Pascal str) + +