ô Softie (Softie1) ô Soft key extensions ô by David Holton ( ô for M/C 2!ô (c) BBC Acorn User May 1991 <: F Z%=&5000 P zp1=&7A Z zp2=zp1+1 dcopyVec1=zp1+2 ncopyVec2=zp1+3 xcopyHi=&93 ‚osasci=&FFE3 Œosnewl=&FFE7 –oswrch=&FFEE  osbyte=&FFF4 ªoscli=&FFF7 ´: ¾ã N%=4 ¸ 6 ˆ 2 È P%=&8000 Ò O%=Z% Ü [ OPT N% æBRK ðBRK úBRK JMP whatsUpNow  EQUB &82 EQUB offset ƒ &100 " EQUB &91 , .title 6)EQUS"MR SOFTIE'S Magic Soft-Keys Rom" @BRK J EQUB &0D T$EQUS" FK (flip banks of f1-f9)" ^ EQUB &0D hEQUS" SK (show f1-f9)" r EQUB &0D |EQUS" WK (wipe f1-f9)" † EQUB &0D  EQUB &1B š .offset ¤BRK ® EQUS"(C) BBC Acorn User '91" ¸BRK Â: Ì] ÖO%=Z%+&1000 à P%=&9000 ê [ OPT N% ô: þ.whatsUpNow PHA PHX PHY & CMP #&27 0BEQ pollJmp : CMP #&24 DBEQ cpyBkJmp N CMP #&15 XBEQ initJmp b CMP #9 l BEQ help v CMP #4 €BEQ youRang Š: ” .noClaim žPLY ¨PLX ²PLA ¼RTS Æ: Ð .pollJmp ÚJMP pollOn ä: î .initJmp ø LDA &209 INA  BEQ noClaim JMP initiate  : * .cpyBkJmp 4JMP copyBack >: H .help RLDA (&F2),Y \ CMP #&0D fBNE notOurHelp pJSR osnewl z LDX #&FF „ .helpLoop ŽINX ˜LDA title,X ¢JSR osasci ¬ CMP #&1B ¶BNE helpLoop ÀJSR osnewl Ê.notOurHelp ÔJMP noClaim Þ: è .youRang òINY üINY LDA (&F2),Y  CMP #&0D BNE notOurs $DEY .LDA (&F2),Y 8 € #&DF B CMP #—"K" LBNE notOurs VDEY `LDA (&F2),Y j € #&DF t CMP #—"F" ~BEQ flipJmp ˆ CMP #—"S" ’BEQ showJmp œ CMP #—"W" ¦BEQ wipeJmp ° .notOurs ºJMP noClaim Ä: Î .flipJmp Ø JMP flip â: ì .showJmp ö JMP show :  .wipeJmp  JMP wipe : ( .pollOn 2 LDA #&16 <JSR osbyte FJMP noClaim P: Z .initiate dSEI nLDA #oscliTrap ƒ &100 x STA &DAB ‚LDA #oscliTrap &100 Œ STA &DAC – LDA &F4   STA &DAD ª LDA #&FF ´ STA &209 ¾ LDA #&0C È STA &208 ÒCLI Ü LDA #&17 æJSR osbyte ðJMP noClaim ú: .oscliTrap  JSR &E802  LDA &701 " € #&DF , CMP #—"K" 6BNE noNeed @ JSR save JJSR byeAndy T .noNeed ^RTS h: r.pageInAndy | LDA &F4 † „A #&80 BRA fixRomsel š: ¤ .byeAndy ® LDA &F4 ¸ € #&7F Â.fixRomsel Ì STA &FE30 Ö STA &F4 àRTS ê: ô .testPtrs þ LDY #&10  .chkLoop LDA &8011,Y  CMP #&80 & BMI fail 0 CMP #&84 : BPL fail DDEY NBPL chkLoop XRTS b .fail l LDA #&12 vJSR osbyte €RTS Š: ” .save žJSR pageInAndy ¨JSR testPtrs ² .update ¼ LDA &800F Æ STA &F8 Ð LDA &8020 Ú STA &F9 ä LDY #&21 î .upDloop øLDA &8000,Y STA store,Y  DEY BPL upDloop  RTS *: 4 .copyBack > LDY #&10 H .chkLoop2 RLDA store+&11,Y \ CMP #&80 fBMI copout p CMP #&84 zBPL copout „DEY ŽBPL chkLoop2 ˜JSR pageInAndy ¢ LDY #&21 ¬ .cBloop ¶LDA store,Y ÀSTA &8000,Y ÊDEY ÔBPL cBloop Þ .copout èJSR byeAndy òJMP noClaim ü:  .flip JSR pageInAndy SEI $ LDY #0 . LDX #4 8 LDA #&80 B STA zp2 L STZ zp1 VLDA #copyHi `STA copyVec2 jSTZ copyVec1 t .flipLoop ~LDA (zp1),Y ˆ STA temp ’LDA (copyVec1),Y œSTA (zp1),Y ¦ LDA temp °STA (copyVec1),Y ºINY ÄBNE flipLoop Î INC zp2 ØINC copyVec2 âDEX ìBNE flipLoop öCLI JSR testPtrs JSR update :  .show (JSR byeAndy 2 LDA #&20 < STA zp1 F STA zp2 P LDA &355 Z CMP #7 dBNE showGo n LDA #&82 x STA zp1 ‚INA Œ STA zp2 – .showGo  JSR osnewl ª LDA #—"0" ´ .shoLoop ¾PHA È LDA zp1 ÒJSR oswrch ÜPLA æPHA ðJSR oswrch ú LDA zp2 JSR oswrch PLA PHA "STA shoText+5 ,LDX #shoText ƒ &100 6LDY #shoText &100 @ JSR oscli JPLA TINA ^CMP #1+—"9" hBNE shoLoop rJSR osnewl |PLY †PLX PLA š LDA #0 ¤RTS ®: ¸ .wipe  LDA #&12 ÌJSR osbyte ÖJSR pageInAndy àJSR update ê JMP show ô: þ .shoText EQUS"SHOW ?"  EQUB &0D : & .temp 0BRK : .store D] Ní X,ÿ "SRWRITE "+Ã~Z%+" "+Ã~(O%+1)+" 8000 7" ÿ