From a651218346d282269958e458ce66fc89dbaa0bf6 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Mon, 16 Aug 2021 13:42:23 -0400 Subject: [PATCH] Merged JGH's auxmem.bytwrd.s improvements. --- applecorn.po | Bin 819200 -> 819200 bytes auxmem.bytwrd.s | 150 +++++++++++++++++++++++++++--------------------- 2 files changed, 84 insertions(+), 66 deletions(-) diff --git a/applecorn.po b/applecorn.po index 59fe26350faa9d81d9eeca967d1189dbce0103f6..3fb4fddb7e3e32ec73182654469dfea6e3b10767 100644 GIT binary patch delta 4910 zcmeHJeRNZ28NY8xzbO3z>7dr~0@VYwhYe(Mc08NlD6(^gaDX{HM_rfX+Cb+K-z>P{c~wPNe)Z+>^z z^E)=J-YMNoEuuaxr>0@~Wo0=j*wb4!?s#S!z&a;V7X;Eg(=vUZ98{u-U+ZD zQ~6X|aSE14=cg5Bzec4~vMhm0uSqM;{tcB&jV>1FyJ7wol|~&+7w7V{;rW6{%pn5+je{#bi$MVPguhevW8Vc;BbD~qdEGc>6SDkr#H@f zgWf(bUCBH(2kY}Ci;yl?@_LS`r@xEqx?~>k_PMRf+{5S*<&u4u} z%~$6#);@;lV72tsnxfQHN8hh0Nlo?in$yLZQ{ehH3(@!VND@SHwizrW*NAa5)?mwc zEFOvBfAbS@#gqWsG85GTC|4{PPVg}t;Nyv4*q;bS!YOp?OmyoEbZ|5riSY_C$PQ

xY)^Z3XJEISyE^RYwVl8c1vOuwS6zNg z4!LkxP0ZPItQHiWGaB)gWH!jA;#lTtmy5a3j@2a%*$kjZ^AT<^YZdKsk=MpBNuot3QcNj|UZj{)lxC4) zVN6yFxNaf!LNr=h6zw8QI}NsJMM_JG(jrn?L0nGc*(r}~tyA*)X*6dM(alL?94TI6 zjI#o`5xaSR;BsFqnBb=(G1W%|IcOY=*EB$u7a18LZ3cofjbP*?_#`~Z2Ghh|98iEj zKN0A^5(xzW92(~pjH%noI6VVyu0z3aPB(n_3*RK`pHTp!tgSVm~{uU3_91vDv6cd!(hQypvOwhyoPGDGs(1{yKAXr6$uyfpA z52>3j{#GP5fkXbB2`EU>gpOh84cevhMzMuBtOM`?$zcI6JPvDrk|NHL=XfYh|(2KwIRVtOO{ z*g}C$%qFwq^2g)6a{D(>;btLm=Bd^|j=KhkF)4fUPwb+CxJ@X`Wcz3^*hCCzm7LQ? z-_wmo2kd)Z6dy5;S)zA(0WJ?$rgj;!Qls~fD>_4*_4YG)61HVfPuH0 znfb&gI3X`vdB`&!js$ppZOa^_tT=?)>3qqzR7T0X@4q11^WqQpzO?U0`zzs4P9W8X zi}DT}{K-!b9sb$RUq156FOI(YOQ7FIs@{^cU%me8V{(|?N2)t>bE=O2_C)o`H-2}j z=JcBipvF;y1Qkio)YjF*?7yg?1ZC#XZ~sC0$9Mkp?w|ki-d`CJv;q~)|J&Jf?>C&k zpl)ossJV2R)#~)X3!{cjs8rhAYA}il4xmhFTlO> zbvs?x-5zgGZ(l!PMo_~sv@UPpW8dJ7Pj32$h6DV_sEbCDN%~Mp39Q)L+Kdh_*rV~a z`C5GK@V3Dl@bSJu-@knOZ`cRBeI8#wyq@cZ>#VN}-Z9}f;>#Yq;#=>l@zo12?R(d! z^KHp|wK{S#dg8V!(|(i9v}dr}DvN7Zs+TLTb)cf`47Pml?OLh2Hu#D%+JTA-*7**s zShe3M!^MND$rby{*D1f$iJm}vmCtvg74ow_-MzY~44?IBqxJV>)%QBJ(dzq*RHm9M zQ=@~FM18l?UYSujcA>2nHGcVaMf9Co)K-Ts$e2mhq>RZ`Q8K0qepFQHWWMz3qJ5Jx zHMJ5QERkfYsp<#ns_IXfEd0VJCm!I@N%&i#M$b}JHLASw^s4-H<^4{SRj6Li4BpI$ zO4S>fL2S73egwO2sGm`m*in(;Njo|&nKSfphrxUeJtaBmLJcm7dnw0$&W(#ce)`z# zHH$O;KU}kpBH@bVnmc<{n!PGLbfcQRD$QP%X0J*QU6rH=Dc(TL92imydh delta 2412 zcmZuz4RllG8UDWfloX^bGTKrrd_~R!$Uasvh{+!;jXjtE!jO zpdxgxf=6%Cig1?p;D)tzKdJ@VHZ&LAQ<$aYRn9HU(l*rAKU`A}w4JB`wU=gT`E-G_ zaL!(ogQ#4=O0Sfb&QYK|bZuc;-wOJlkreIDN$YZHX*CUaUm6!m&#Npi5~1ap(jQs3 zrK%nwBzYIjNAE02ySX7uD}-4;E3GG`Wpmm=S7pMIoYH$gM0cQl)dHUB$eQ^gRK9le z=8fwgtgZVg#Dphj0N!D7_8mxmrF4O5caB}E`Op1gLT|q984Ux1sX$bWjd`M%=`9DB z(5{1z(_0T!6_KfjaaIA^4{-%7Xebhjtq@y*D$ zW%=}d>f#bX<+o`ibP7hAQh#qo*q(;v>IF4|#BbBQ9fC3Y0<8wVBA>@SV?F#R==17D z^HeY?-ji>u)x}$5>QYnj(Vg>5ub!yEnis6%YSULuKg_iRZQ{3a!3C%9qO-T9^NPFM zZ$Il-Y19&2SPq*N+k@~$oK+&MsPENTY?+sLP-*i#8OF;NJ5m)GDK6B zXvz|!sbs9|7OKTAl;iZTT3e#+eHV|XmNqXKF$rtiQ7LCPO2Dxz{X_A zDn5yd{-AYbu^bxaVucM!D37^i*4M!3La*$9oG8#^XqY)C~ zOMnhe%j06aT?0ZdEG~G((8pZpQ!)l;-RW^b@BBW--gQBc7kYaKrg>V8P~m`(jb3Fe zlYrJwj~UD8d8Ru0plNl!F!Z(z$*QM!m=@DU)9rG>ZYIN#(e$~n5U2^dPi%etZm0X~ zWk(;3Ug(0=DopQmpWo@btmC^1SLuA_=A;?zQzNpr^HBPhq%m6-vjG;4z@bQ1lFx_7 zK~6@=NNOyTr&H+mi6*^XNYcqi@^}OE_O{Bqg?jDTP<9>+*u2h+uOkaNcnEFieDss%yK;!j*4G=LJIpHj$Cl%d@!{bh-#n2HzEWXM1R6mm zQe28lCvw{O7DK~@A}>ZsGBv^p0};mOb2z}j=7+kUbAm(=6G`t=jP+3{opeB_c?`(bhZQ@`Ey^fSME z_V>>{|H2<$+`R|v6Ik27NczW@UVddCXg9F-%h_|~ufF!D{mKKczwze5Lx;hdz|9g| zB2gV_RD1Pc)ruK6P4m=DmNtf3`($ zFaj3A%{6$b#MEZCqyy~2GKuwE#|LTcMJyAY|F;J3!^L12!_5l3D!>1KgKTitbw(%9jt?G80rr8upTzR4zT`9mP~uy%aMEB9o^@6r;Gg?Ls1o(xF|8;GawLEi2q}yhhl?D=NPQog%>Q diff --git a/auxmem.bytwrd.s b/auxmem.bytwrd.s index fb7910c..d3ad8b7 100644 --- a/auxmem.bytwrd.s +++ b/auxmem.bytwrd.s @@ -1,5 +1,14 @@ +* AUXMEM.BYTWRD.S +* (c) Bobbi 2021 GPLv3 +* +* Applecorn OSBYTE and OSWORD handlers + * KERNEL/OSWOSB.S ***************** +* OSBYTE and OSWORD dispatch +* +* 15-Aug-2021 Added 'set variable' OSBYTEs 1-6 + XC ; 65c02 @@ -7,11 +16,15 @@ * OSBYTE DISPATCH TABLE * ************************* +BYTEVARBASE EQU $190 ; Base of OSBYTE variables + BYTWRDADDR DW BYTE00 ; OSBYTE 0 - Machine host DW BYTE01 ; OSBYTE 1 - User flag DW BYTE02 ; OSBYTE 2 - OSRDCH source DW BYTE03 ; OSBYTE 3 - OSWRCH dest -* DW BYTE04 ; OSBYTE 4 - Cursor keys + DW BYTE04 ; OSBYTE 4 - Cursor keys + DW BYTE05 ; OSBYTE 5 - Printer destination + DW BYTE06 ; OSBYTE 6 - Printer ignore BYTWRDLOW BYTESZLO EQU BYTWRDLOW-BYTWRDADDR BYTELOW EQU BYTESZLO/2-1 ; Maximum low OSBYTE @@ -20,22 +33,22 @@ BYTEHIGH EQU $7C ; First high OSBYTE DW BYTE7D ; OSBYTE 125 - Set Escape DW BYTE7E ; OSBYTE 126 - Ack. Escape DW BYTE7F ; OSBYTE 127 - Read EOF - DW BYTE80 ; OSBYTE 128 - ADVAL - DW BYTE81 ; OSBYTE 129 - INKEY + DW BYTE80 ; OSBYTE 128 - ADVAL - MISC.s + DW BYTE81 ; OSBYTE 129 - INKEY - CHARIO.s DW BYTE82 ; OSBYTE 130 - Memory high word DW BYTE83 ; OSBYTE 131 - MEMBOT DW BYTE84 ; OSBYTE 132 - MEMTOP DW BYTE85 ; OSBYTE 133 - MEMTOP for MODE - DW BYTE86 ; OSBYTE 134 - POS, VPOS - DW BYTE87 ; OSBYTE 135 - Character, MODE + DW BYTE86 ; OSBYTE 134 - POS, VPOS - VDU.s + DW BYTE87 ; OSBYTE 135 - Character, MODE - VDU.s DW BYTE88 ; OSBYTE 136 - *CODE DW BYTE89 ; OSBYTE 137 - *MOTOR DW BYTE8A ; OSBYTE 138 - Buffer insert DW BYTE8B ; OSBYTE 139 - *OPT DW BYTE8C ; OSBYTE 140 - *TAPE DW BYTE8D ; OSBYTE 141 - *ROM - DW BYTE8E ; OSBYTE 142 - Enter language - DW BYTE8F ; OSBYTE 143 - Service call + DW BYTE8E ; OSBYTE 142 - Enter language - INIT.s + DW BYTE8F ; OSBYTE 143 - Service call - INIT.s BYTWRDTOP DW BYTEVAR ; OSBYTE 166+ - Read/Write OSBYTE variable * Maximum high OSBYTE @@ -189,7 +202,6 @@ JMPADDR JMP ($00FA) * On exit, Y=length of line, offset to * CC = Ok, CS = Escape * - XC ; 65c02 WORD00 IF MAXLEN-OSTEXT-2 LDY #$04 @@ -204,9 +216,9 @@ WORD00 IF MAXLEN-OSTEXT-2 BPL :WORD00LP2 INY ; Initial line length = zero ELSE - LDA (OSCTRL),Y ; Copy control block + LDA (OSCTRL),Y ; Copy control block STA OSTEXT,Y ; 0,1 => text - INY ; 2 = MAXLEN + INY ; 2 = MAXLEN CPY #$05 ; 3 = MINCHAR BCC WORD00 ; 4 = MAXCHAR LDY #$00 ; Initial line length = zero @@ -288,16 +300,12 @@ WORD02 RTS ; Dummy, do nothing XC ; 65c02 WORD05 JSR GETADDR ; Point to address, set X and Y -* needs to switch to main memory LDA (OSINTWS) ; Get byte -* needs to switch back STA (OSCTRL),Y ; Store it RTS WORD06 JSR GETADDR ; Point to address, set X and Y LDA (OSCTRL),Y ; Get byte -* needs to switch to main memory STA (OSINTWS) ; Store it -* needs to switch back RTS GETADDR STA OSINTWS+0 ; (OSINTWS)=>byte to read/write INY @@ -306,78 +314,94 @@ GETADDR STA OSINTWS+0 ; (OSINTWS)=>byte to read/write LDY #$04 ; Point Y to data byte RTS -* KERNEL/BWMISC.S +* OSBYTE routines ***************** -* Here until tidied - BYTE00 LDX #$0A ; $00 = identify Host RTS -BYTE01 LDA #$F1 ; $01 = read/write user flag - JMP BYTEHND +BYTE88 LDA #$01 ; $88 = *CODE +WORDE0 JMP (USERV) ; OSWORD &E0+ -BYTE02 RTS ; $02 = select input stream - -BYTE03 RTS ; $03 = select output stream - -BYTE7C LDA ESCFLAG ; $7C = clear escape condition - AND #$7F ; Clear MSbit - STA ESCFLAG +* Low OSBYTE converted into Set Variable +BYTE02 LDA #$F7 ; -> &B1 +; +BYTE09 ; -> &C2 +BYTE0A ; -> &C3 +BYTE0B ; -> &C4 +BYTE0C ADC #$C9 ; -> &C5 +; +BYTE01 ; -> &F1 +BYTE05 ; -> &F5 +BYTE06 ADC #$07 ; -> &F6 +; +BYTE03 ; -> &EC +BYTE04 ADC #$E8 ; -> &ED +; +* Read/Write OSBYTE variable +BYTEVAR TAY ; offset to variable + LDA BYTEVARBASE+0,Y + TAX ; X=old value + AND OSYREG + EOR OSXREG + STA BYTEVARBASE+0,Y ; update variable + LDA BYTEVARBASE+1,Y + TAY ; Y=next value +* Unimplemented +BYTE89 ; *MOTOR +BYTE8A ; Buffer insert +BYTE8C ; *TAPE +BYTE8D ; *ROM RTS -BYTE7D ROR ESCFLAG ; $7D = set escape condition - RTS - -BYTE7E LDA ESCFLAG ; $7E = ack detection of ESC - AND #$7F ; Clear MSB - STA ESCFLAG - LDX #$FF ; Means ESC condition cleared - RTS - -BYTE7F PHY ; $7F = check for EOF - JSR CHKEOF - PLY - RTS - -BYTE82 LDY #$FF ; $82 = read high order address - LDX #$FF ; $FFFF for I/O processor +* Memory layout +BYTE82 ; $82 = read high order address +* LDY #$00 +* LDX #$00 ; $0000 for language processor +* Should return $0000, but BCPL and Lisp playing silly buggers + LDY #$FF ; $FFFF for I/O processor + LDX #$FF RTS BYTE83 LDY #$0E ; $83 = read bottom of user mem LDX #$00 ; $0E00 RTS +BYTE85 ; $85 = top user mem for mode BYTE84 LDY #$80 ; $84 = read top of user mem LDX #$00 RTS -BYTE85 LDY #$80 ; $85 = top user mem for mode - LDX #$00 - RTS +* Move to keyboard stuff +************************ +BYTE7E LDX #$00 ; $7E = ack detection of ESC + BIT ESCFLAG + BPL BYTE7DOK ; No Escape pending +* TO DO: process escape effects + DEX ; X=$FF, Escape was pending +BYTE7C CLC ; &7C = clear escape condition +BYTE7D ROR ESCFLAG ; $7D = set escape condition +BYTE7DOK RTS -* BYTE86 and BYTE87 are in AUXMEM.VDU.S - -BYTE88 JMP (USERV) ; $88 = *CODE - -BYTE89 RTS ; $89 = *MOTOR - -BYTE8A RTS ; $8A = insert val into buf - -BYTE8B LDA #$00 ; $8B = *OPT +* Passed on to filing system +BYTE8B LDA #$00 ; &00 -> &00 - *OPT +BYTE7F AND #$01 ; &7F -> &01 - EOF JMP (FSCV) ; Hand over to filing system -BYTE8C RTS ; $8C = *TAPE -BYTE8D RTS ; $8D = *ROM +* TO DO: Move this to AUXMEM.INIT.S +*********************************** * OSBYTE $8E - Enter language ROM +* BYTE8E PHP ; Save CLC=RESET, SEC=Not RESET - LDA #$08 + LDA #$00 STA FAULT+0 LDA #$80 STA FAULT+1 - JSR PRERR ; Print ROM name with PRERR to set FAULT + LDY #$09 + JSR PRERRLP ; Print ROM name with PRERR to set + STY FAULT+0 ; FAULT pointing to version string JSR OSNEWL JSR OSNEWL PLP ; Get entry type back @@ -386,6 +410,7 @@ BYTE8E PHP ; Save CLC=RESET, SEC=Not RESET * OSBYTE $8F - Issue service call * X=service call, Y=parameter +* BYTE8F TXA SERVICE LDX #$0F BIT $8006 @@ -396,11 +421,8 @@ SERVICE LDX #$0F :SERVSKIP LDX #$FF :SERVDONE RTS -BYTEDA RTS ; $DA = clear VDU queue - -BYTEEA LDX #$00 ; No tube - RTS ; $EA = Tube presence +* Test/Debug code UNSUPBYTWRD LDA #OSBYTEM @@ -422,7 +444,3 @@ OSWORDM ASC 'OSWORD($' OSBM2 ASC ').' DB $00 -BYTEVAR LDX #$00 - LDY #$00 -WORDE0 RTS -