From a9bde4db9334328047723b4cc0bc5457f31f1dd5 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Thu, 12 Aug 2021 16:58:13 -0400 Subject: [PATCH] Merged in latest JGH enhancements. --- applecorn.po | Bin 819200 -> 819200 bytes auxmem.chario.s | 392 ++++++++++++++++++++++++++++++++---------------- auxmem.misc.s | 95 ++++++------ 3 files changed, 311 insertions(+), 176 deletions(-) diff --git a/applecorn.po b/applecorn.po index 90c494a422a34aea47ec0e5dd3cfa8e9b90a57f0..bff253a35ac977574af2539ec7ae970d6f21db24 100644 GIT binary patch delta 8094 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 delta 1135 zcmZ8gdu&rx9KPqCd%NCs?Mh~GbOi1Q8XNX#SVE>jT-_!cb_F|~X3<&|bYWumK!zyp zMi{6`lg65y&0x3@s9u&f%a*jk2Nrp3cWmozyC-t*?IfcAtWJrKC~TfKOJ+PdU(We{ z-}n2SU(U(lxUC$wbzqqCzd{#KImBl=e+gaa|ARVkf2r-6=Nf7o${Ok$tIHY*g7N?Z zv7<1ne?*6j(ISG`Vlr(eZV_zm7AAjak7kzk8%ZPR_S^DK`uF5%5&tt_hm2$)c+YUc z00IW`VBj`IYHZatwNLEy1M=@c0|~+>Nd2=&Z=>(%-)L*^=sfu5p{~Pk9eEq;cLK*q z5O|y}4F5%bvlqzd;`4B9?V#$VqS56=IKnOP#08?!OGo<#Bm4{Sf=1ucvt20fc~lte z*&&ppxn8OQ_3eeGvO4usf*dvedHgh66BlNAiFGLg!*h6He_F=#+-dP^DMv_W6=dt9 z>LQ!>!BPOWMVzm~PXKVCh1Z~fDQba7f!?LG)UjQP5aXv=7b@NlRqOz*@B>3wwWP$9 zq!qs9XRy@U3addF-E4(Cm`6unhiTHKARAAu)AaLm_SfF%9`aSSTU~nnte#vy8`Mms|MDKR^M;pBLitmKEq+Fkzsr|%}CZ;E8UijZh^5tW~|c96CYX)sctEU{Yv(s zq7JxT=N^^r1+CHdrQeSr*IBAGuS+>!w+jzTK6@N>cR-ID@M`7}=U3j*zNF}{CK9p4 zmpmb?;Z=M!yBnP~HO_`ILMUG0wN14SOs!eEv$5V$|8z#KTH(%GTTL0UprnesWMnB!T?E~s@mMl6 zll1b^)FgjtYBqE!6A&lF$<@&Gm8n%S5=%~A`@jEsVq$F7GA<@Bd(X4DBFkn<#**L7 zgklMCIBQ}56CAy7cw{wCOvFReS1%_~aT6R2yhD=+43Wz;apl_Z2>xex!|&4nP?1ed zkOqNG5UV=Uj949+!XH{=7O#(uPsF5nA~`uVJu^FZ=0, wait for keypress +* Y=$FF, A=FF, X=??, CS - timeout +* Y<$80, A=esc, X=??, CS - escape +* Y<$80, A=char, X=??, CC - character read + 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=$FF, CS - timeout +* Y=$1B, X=???, CS - escape +* Y=$00, X=char, CC - keypress + +NEGINKEY LDX #$00 ; Unimplemented LDY #$00 CLC RTS -:ESC ROR ESCFLAG - LDY #27 ; Escape - SEC - RTS -NEGKEY LDX #$00 ; Unimplemented - LDY #$00 - RTS + * KERNEL/KEYBOARD.S ******************* -KBDREAD -KEYPRESS LDA $C000 - TAY +* KEYREAD +************************* +* Test for and read from input, +* expanding keyboard special keys +* +* On exit, CS=no keypress +* CC=keypress +* A =keycode, X=corrupted +KEYREAD +* TO DO: check *EXEC source +* TO DO: expand current soft key + JSR KBDREAD ; Fetch character from KBD "buffer" + BCS KEYREAD0 ; Nothing pending +* TO DO: process cursor keys +* TO DO: process new soft keys +KEYREAD0 RTS + + +* 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 - BCC KEYNONE ; No key pressed - AND #$7F + BCS KBDDONE ; No key pressed + BVS KBDDONE ; VS=test for keypress STA $C010 ; Ack. keypress BIT $C061 - BMI KEYLALT ; Left Apple pressed + BMI KBDLALT ; Left Apple pressed BIT $C062 - BMI KEYRALT ; Right Apple pressed + BMI KBDRALT ; Right Apple pressed CMP #$09 - BEQ KEYTAB + BEQ KBDTAB ; CMP #$08 - BCC KEYOK ; <$08 not cursor key + BCC KBDDONE ; <$08 not cursor key CMP #$0C - BCC KEYCURSR + BCC KBDCURSR CMP #$15 - BEQ KEYCUR15 -KEYOK SEC ; SEC=Ok -KEYNONE RTS + BEQ KBDCUR15 + CMP #27 ; TEMP +* CMP FXESCCHAR ; Current ESCAPE char? + BNE KBDNOESC ; No + LDX FXESCON ; Is ESCAPE enabled? + BNE KBDNOESC ; No + ROR ESCFLAG ; Set Escape flag +KBDNOESC CLC ; CLC=Ok +KBDDONE RTS -KEYTAB LDA #$C9 -; If cursors active, COPY -; else TAB - SEC - RTS - -KEYRALT ; Right Apple key pressed -KEYLALT CMP #$40 ; Left Apple key pressed - BCS KEYCTRL +KBDRALT ; Right Apple key pressed +KBDLALT CMP #$40 ; Left Apple key pressed + BCS KBDCTRL CMP #$30 - BCC KEYOK ; <'0' + BCC KBDFUNOK ; <'0' CMP #$3A - BCS KEYOK ; >'9' -KEYFUNC AND #$0F ; Convert Apple-Num to function key + BCS KBDOK ; >'9' +KBDFUNC AND #$0F ; Convert Apple-Num to function key ORA #$80 BIT $C062 - BPL KEYFUNOK ; Left+Digit -> $8x + BPL KBDFUNOK ; Left+Digit -> $8x ORA #$90 ; Right+Digit -> $9x BIT $C061 - BPL KEYFUNOK + BPL KBDFUNOK EOR #$30 ; Left+Right+Digit -> $Ax -KEYFUNOK SEC - RTS -KEYCTRL AND #$1F ; Apple-Letter -> Ctrl-Letter +KBDFUNOK RTS +KBDCTRL AND #$1F ; Apple-Letter -> Ctrl-Letter +KBDOK CLC RTS -KEYCUR15 -* BIT $C062 -* BPL KEYCUR16 ; Right Apple not pressed -* LDA #$C9 ; Solid+Right -> COPY? -* SEC -* RTS -KEYCUR16 LDA #$09 ; Convert RGT to $09 -KEYCURSR AND #$03 - ORA #$CC ; Cursor keys $CC-$CF - SEC ; SEC=Ok - RTS - - +KBDTAB LDA #$11 ; Convert TAB to $C9, expanded later +KBDCUR15 SBC #$0C ; Convert RGT to $09 +KBDCURSR CLC + ADC #$C4 ; Cursor keys $CC-$CF + RTS ; CLC=Ok set earlier diff --git a/auxmem.misc.s b/auxmem.misc.s index 3b842fd..457f3d7 100644 --- a/auxmem.misc.s +++ b/auxmem.misc.s @@ -10,16 +10,12 @@ BYTE80 LDY #$00 ; Prepare return=&00xx TXA ; X<0 - info about buffers BMI ADVALBUF ; X>=0 - read input devices -* -* TEST CODE CPX #$7F BNE ADVALNONE ADVALWAIT JSR KBDREAD - BCC ADVALWAIT + BCS ADVALWAIT TAX RTS -* TEST CODE -* ADVALNONE LDX #$00 ; Input, just return 0 RTS ADVALBUF INX @@ -39,55 +35,64 @@ ADVALBUF INX ****************** * Beep +* +* Sound measurement shows the tone formula is: +* 1.230 MHz +* ------------- = cycles +* 8 * frequency +* +* cycles = BEEPX*5+10 +* +* So: +* BEEPX = (cycles-10)/5 +* So: +* BEEPX = ( 1.230 MHz ) +* (------------- - 10 ) / 5 +* (8 * frequency ) + +* BEEPX EQU 57 ; note=C5 +BEEPX EQU 116 ; note=C4 BEEP PHA PHX -* -* A nicer beep -* 1.023MHz clock -* PHY - LDY #$00 ; 2cy duration -* -* $C1 975cy = 524.6Hz = C5 slightly sharp -* (actually sounds like E5 on my Casio) -* $6B 546cy = 936.8Hz = A5# sharp - close to Apple BEEP -* $60 491cy = 1041.7Hz = C6 slightly sharp -* -:L1 LDX #$60 ; 2cy pitch 2cy + LDY #$00 ; duration +:L1 LDX #BEEPX ; 2cy pitch 2cy *------------------------------------------------ -:L2 DEX ; 2cy 193 * 2cy - BNE :L2 ; 3cy/2cy 192 * 3cy + 1 * 2cy +:L2 DEX ; 2cy BEEPX * 2cy + BNE :L2 ; 3cy/2cy (BEEPX-1) * 3cy + 1 * 2cy *------------------------------------------------ -* 964cy - LDA $C030 ; 4cy 4cy - DEY ; 2cy 2cy - BNE :L1 ; 2cy/3cy 3cy - PLY ; 975cy = 524.6Hz = C5 -* -* LDX #$20 -*:L1 LDA $C030 -* JSR DELAY -* INX -* BNE :L1 -* +* BEEPX*5-1cy + LDA $C030 ; 4cy BEEPX*5+5 + DEY ; 2cy BEEPX*5+7 + BNE :L1 ; 3cy/2cy BEEPX*5+10 + PLY ; PLX PLA RTS * Delay approx 1/100 sec -DELAY PHX - PHY - LDX #$00 -:L1 INX ; 2 - LDY #$00 ; 2 -:L2 INY ; 2 - CPY #$00 ; 2 - BNE :L2 ; 3 (taken) - CPX #$02 ; 2 - BNE :L1 ; 3 (taken) - PLY - PLX - RTS +************************ +* Enter at DELAY with CS to test keyboard +* Enter at CENTI to ignore keyboard +* +CENTI CLC ; Don't test keyboard +DELAY PHX ; 3cy + PHY ; 3cy + LDY #10 ; 2cy 10 * 1/1000s +*------------------------------------------------ +:L1 LDX #$48 ; 2cy $48 gives about 1/1000s +:L2 BCC :L3 ; 2cy/3cy Don't test kbd + LDA $C000 ; 4cy + BMI :L5 ; 2cy keypress, exit early +:L3 DEX ; 2cy + BNE :L2 ; 3cy/2cy -> 72*(2+2+4+2+2+3)-1 +* ; = 1079 -> 0.00105s +*------------------------------------------------ +:L4 DEY ; 2cy + BNE :L1 ; 3cy/2cy +:L5 PLY ; 4cy + PLX ; 4cy + RTS ; 6cy * Print string pointed to by X,Y to the screen OUTSTR TXA @@ -306,5 +311,3 @@ MOSVEND * Buffer for one 512 byte disk block in aux mem AUXBLK DS $200 - -