diff --git a/applecorn.po b/applecorn.po index b80653c..750aea6 100644 Binary files a/applecorn.po and b/applecorn.po differ diff --git a/auxmem.bytwrd.s b/auxmem.bytwrd.s index c44982b..2921345 100644 --- a/auxmem.bytwrd.s +++ b/auxmem.bytwrd.s @@ -14,10 +14,6 @@ ************************* * OSBYTE DISPATCH TABLE * ************************* - -* Moved to AUXMEM.VDU.S for benefit of Merlin-8/-16 -*BYTEVARBASE EQU $190 ; Base of OSBYTE variables - BYTWRDADDR DW BYTE00XX ; OSBYTE 0 - Machine host DW BYTE01 ; OSBYTE 1 - User flag DW BYTE02 ; OSBYTE 2 - OSRDCH source @@ -38,16 +34,16 @@ BYTWRDLOW BYTESZLO EQU BYTWRDLOW-BYTWRDADDR BYTELOW EQU BYTESZLO/2-1 ; Maximum low OSBYTE BYTEHIGH EQU $75 ; First high OSBYTE - DW BYTE75 ; OSBYTE 117 - Read VDU status - DW BYTE76 ; OSBYTE 118 - Update keyboard LEDs + DW BYTE75 ; OSBYTE 117 - Read VDU status - VDU.s + DW BYTE76 ; OSBYTE 118 - Update kbd LEDs - CHARIO.s DW BYTENULL ; OSBYTE 119 DW BYTENULL ; OSBYTE 120 DW BYTENULL ; OSBYTE 121 DW BYTENULL ; OSBYTE 122 DW BYTENULL ; OSBYTE 123 - DW BYTE7C ; OSBYTE 124 - Clear Escape - DW BYTE7D ; OSBYTE 125 - Set Escape - DW BYTE7E ; OSBYTE 126 - Ack. Escape + DW BYTE7C ; OSBYTE 124 - Clear Escape - CHARIO.s + DW BYTE7D ; OSBYTE 125 - Set Escape - CHARIO.s + DW BYTE7E ; OSBYTE 126 - Ack. Escape - CHARIO.s DW BYTE7F ; OSBYTE 127 - Read EOF DW BYTE80 ; OSBYTE 128 - ADVAL - MISC.s DW BYTE81 ; OSBYTE 129 - INKEY - CHARIO.s @@ -81,7 +77,7 @@ BYTEHIGH EQU $75 ; First high OSBYTE DW BYTENULL ; OSBYTE 157 DW BYTENULL ; OSBYTE 158 DW BYTENULL ; OSBYTE 159 - DW BYTEA0 ; OSBYTE 160 - Read VDU variable + DW BYTEA0 ; OSBYTE 160 - Read VDU variable - VDU.s BYTWRDTOP DW BYTEVAR ; OSBYTE 166+ - Read/Write OSBYTE variable * Maximum high OSBYTE @@ -211,22 +207,7 @@ BYTWRDEXIT ROR A ; Move Carry to A CLV ; Clear V = Actioned BYTENULL RTS -BYTWRDFAIL -** TEST code for VIEW -* CPX #$07 -* BNE BYTFAIL0 -* CMP #$76 -* BEQ BYTE76 -* CMP #$A0 -* BNE BYTFAIL0 -* LDY #79 ; Read VDU variable $09,$0A -* LDX #23 -* BRA BYTWRDEXIT -*BYTE76 -* LDX $00 -* BRA BYTWRDEXIT -* TEST -BYTFAIL0 PHX ; *DEBUG* +BYTWRDFAIL PHX ; *DEBUG* JSR SERVICEX ; Offer to sideways ROMs as service X LDX OSXREG ; Get returned X, returned Y is in Y CMP #$01 @@ -291,8 +272,8 @@ WORD00 IF MAXLEN-OSTEXT-2 * ROR A ; Move bit 1 into Carry * TXA ; Get character back * BCS :WORD00TEST ; VDU disabled, ignore -* LDX FXVDUQLEN ; Get length of VDU queue -* BNE :WORD00ECHO ; Not zero, just print + LDX FXVDUQLEN ; Get length of VDU queue + BNE :WORD00ECHO ; Not zero, just print :WORD00TEST CMP #$7F ; Delete BEQ :WORD00DEL CMP #$08 ; If KBD has no DELETE key @@ -328,6 +309,7 @@ WORD00 IF MAXLEN-OSTEXT-2 ROL A ; Carry=Escape state RTS + * OSWORD &01 - Read elapsed time * OSWORD &02 - Write elapsed time * OSWORD &03 - Read countdown timer @@ -395,13 +377,10 @@ GETADDR STA OSINTWS+0 ; (OSINTWS)=>byte to read/write CMP #$80 ; *TO DO* Needs an appropriate value RTS + * OSBYTE routines ***************** -** TO DO: move to init.s -*BYTE00 LDX #$0A ; $00 = identify Host -* RTS ; %000x1xxx host type, 'A'pple - BYTE88 LDA #$01 ; $88 = *CODE WORDE0 JMP (USERV) ; OSWORD &E0+ @@ -429,17 +408,10 @@ BYTEVAR TAY ; offset to variable 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 * Memory layout BYTE82 ; $82 = read high order address -* LDY #$00 -* LDX #$00 ; $0000 for language processor * Should return $0000, but BCPL, Lisp and View try to move * up to $F800 overwriting Apple II stuff LDY #$FF ; $FFFF for I/O processor @@ -465,40 +437,6 @@ BYTE7F AND #$01 ; &7F -> &01 - EOF CALLFSCV JMP (FSCV) ; Hand over to filing system -* TO DO: Move this to AUXMEM.INIT.S -*********************************** - -* OSBYTE $8E - Enter language ROM -* -BYTE8E PHP ; Save CLC=RESET, SEC=Not RESET - LDA #$00 - STA FAULT+0 - LDA #$80 - STA FAULT+1 - 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 - LDA #$01 - JMP AUXADDR - -* OSBYTE $8F - Issue service call -* X=service call, Y=parameter -* -BYTE8F -SERVICEX TXA -SERVICE LDX #$0F - BIT $8006 - BPL :SERVSKIP ; No service entry - JSR $8003 ; Call service entry - TAX - BEQ :SERVDONE -:SERVSKIP LDX #$FF -:SERVDONE RTS - - * Test/Debug code UNSUPBYTWRD TAX LDA #AUXMOS1 STA A1H @@ -106,49 +105,78 @@ MOSINIT LDX #$FF ; Initialize Alt SP to $1FF :S7 BRA :L2 :NORELOC -:S8 STA $C00D ; 80 col on - STA $C003 ; Alt charset off - STA $C055 ; PAGE2 - JMP MOSHIGH ; Ensure executing in high memory here +:S8 STA $C00D ; 80 col on + STA $C003 ; Alt charset off + STA $C055 ; PAGE2 + JMP MOSHIGH ; Ensure executing in high memory here MOSHIGH SEI LDX #$FF - TXS ; Initialise stack - INX ; X=$00 + TXS ; Initialise stack + INX ; X=$00 TXA -:SCLR STA $0000,X ; Clear Kernel memory +:SCLR STA $0000,X ; Clear Kernel memory STA $0200,X STA $0300,X INX BNE :SCLR LDX #ENDVEC-DEFVEC-1 -:INITPG2 LDA DEFVEC,X ; Set up vectors +:INITPG2 LDA DEFVEC,X ; Set up vectors STA $200,X DEX BPL :INITPG2 - JSR KBDINIT ; Returns A=startup MODE - JSR VDUINIT ; Initialise VDU driver + JSR KBDINIT ; Returns A=startup MODE + JSR VDUINIT ; Initialise VDU driver JSR PRHELLO LDA #7 JSR OSWRCH JSR OSNEWL CLC - JMP BYTE8E +* JMP BYTE8E + +* OSBYTE $8E - Enter language ROM +* +BYTE8E PHP ; Save CLC=RESET, SEC=Not RESET + LDA #$00 + STA FAULT+0 + LDA #$80 + STA FAULT+1 + 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 + LDA #$01 + JMP AUXADDR + +* OSBYTE $8F - Issue service call +* X=service call, Y=parameter +* +BYTE8F +SERVICEX TXA +SERVICE LDX #$0F + BIT $8006 + BPL :SERVSKIP ; No service entry + JSR $8003 ; Call service entry + TAX + BEQ :SERVDONE +:SERVSKIP LDX #$FF +:SERVDONE RTS + PRHELLO LDA #HELLO JSR PRSTR JMP OSNEWL -BYTE00XX BEQ BYTE00A ; OSBYTE 0,0 - generate error - LDX #$0A ; $00 = identify Host - RTS ; %000x1xxx host type, 'A'pple +BYTE00XX BEQ BYTE00A ; OSBYTE 0,0 - generate error + LDX #$0A ; $00 = identify Host + RTS ; %000x1xxx host type, 'A'pple BYTE00A BRK DB $F7 -HELLO ASC 'Applecorn MOS 2021-09-10 snapshot' - DB $00 ; Unify MOS messages - - +HELLO ASC 'Applecorn MOS 2021-09-11 snapshot' + DB $00 ; Unify MOS messages diff --git a/auxmem.misc.s b/auxmem.misc.s index 71ce76a..a35cf88 100644 --- a/auxmem.misc.s +++ b/auxmem.misc.s @@ -3,6 +3,7 @@ * * Misc functions and API entry block * 02-Sep-2021 Written GSINIT/GSREAD +* 11-Sep-2021 PR16DEC uses OS workspace, added rest of default vectors/etc. * OSBYTE $80 - ADVAL @@ -80,7 +81,7 @@ OUTSTR TXA * Print string pointed to by A,Y to the screen PRSTR STA OSTEXT+0 ; String in A,Y STY OSTEXT+1 -:L1 LDA (OSTEXT) ; Ptr to string in ZP3 +:L1 LDA (OSTEXT) ; Ptr to string in OSTEXT BEQ PRSTROK JSR OSASCI INC OSTEXT @@ -122,50 +123,52 @@ PRNIB CMP #$0A :S1 ADC #'0' ; < $0A JMP OSWRCH -* Print 16 bit value in XY in decimal +* Print 16-bit value in XY in decimal * beebwiki.mdfs.net/Number_output_in_6502_machine_code -PRDECXY STX :NUM+0 - STY :NUM+1 - LDA #' ' - STA :PAD -:PRDEC16 LDY #$08 ; Five digits +OSNUM EQU OSTEXT+0 +OSPAD EQU OSTEXT+4 + +PRDECXY LDA #' ' +PRDECPAD STA OSPAD + STX OSNUM+0 + STY OSNUM+1 +:PRDEC16 LDY #$08 ; Five digits (5-1)*2 :LP1 LDX #$FF SEC -:LP2 LDA :NUM+0 +:LP2 LDA OSNUM+0 SBC :TENS+0,Y - STA :NUM+0 - LDA :NUM+1 + STA OSNUM+0 + LDA OSNUM+1 SBC :TENS+1,Y - STA :NUM+1 + STA OSNUM+1 INX BCS :LP2 - LDA :NUM+0 + LDA OSNUM+0 ADC :TENS+0,Y - STA :NUM+0 - LDA :NUM+1 + STA OSNUM+0 + LDA OSNUM+1 ADC :TENS+1,Y - STA :NUM+1 + STA OSNUM+1 TXA BNE :DIGIT - LDA :PAD + LDA OSPAD BNE :PRINT BEQ :NEXT :DIGIT LDX #'0' - STX :PAD + STX OSPAD ORA #'0' :PRINT JSR OSWRCH :NEXT DEY DEY BPL :LP1 RTS -:PAD DB $00 -:NUM DW $0000 :TENS DW 1 DW 10 DW 100 DW 1000 DW 10000 + * GSINIT - Initialise for GSTRANS string parsing ************************************************ * On entry, @@ -208,8 +211,10 @@ GSINTGO1 ROR GSFLAG ; Rotate 'leading-quote' into flags * NE=not end of line, more words follow * CC = not end of string * Y =updated for future calls to GSREAD -* VS=control character, <$20 -* VC=not control character >$1F +* VS=7-bit control character, (char AND $7F)<$20 +* VC=not 7-bit control character (char AND $7F)>$1F +* EQ= char=$00, NE= char>$00 +* PL= char<$80, MI= char>$7F * * No string present is checked for with: * JSR GSINIT:BEQ missingstring @@ -238,7 +243,7 @@ GSREADLP STA GSCHAR ; Update accumulator BNE GSREAD2 ; No, check character BIT GSFLAG BPL GSREADEND ; We aren't waiting for a closing quote -* ; End of line before closing quote +* ; End of line before closing quote ERRBADSTR BRK DB $FD ASC 'Bad string' @@ -249,7 +254,7 @@ GSREAD2 CMP #' ' BNE GSREAD3 ; Not a space, process it BIT GSFLAG ; Can space terminate string? BMI GSREADCHAR ; We're waiting for a terminating quote -* ; so return the space character +* ; so return the space character BVC GSREADEND ; Space is a terminator, finish GSREAD3 CMP #$22 ; Is it a quote? BNE GSREADESC ; Not quote, check for escapes @@ -268,7 +273,7 @@ GSREADEND JSR SKIPSPC ; Skip any spaces to next word * EQ=end of line * NE=not end of line, more words follow -GSREADESC CMP #$7C ; Is is '|' escape character +GSREADESC CMP #$7C ; Is it '|' escape character BNE GSREADCHAR ; No, return as character INY ; Step to next character LDA (OSLPTR),Y @@ -303,13 +308,13 @@ GSREADOK INY ; Step to next character RDROM LDX #$0F ; Returns X=current ROM, Y=0, A=byte LDY #$00 ; We haven't really got any ROMs LDA ($F6),Y ; so just read directly - RTS +EVENT RTS -EVENT LDA #OSEVENM - JMP PRSTR -OSEVENM ASC 'OSEVEN.' - DB $00 +*EVENT LDA #OSEVENM +* JMP PRSTR +*OSEVENM ASC 'OSEVEN.' +* DB $00 ********************************************************** @@ -396,6 +401,17 @@ DEFVEC DW NULLRTS ; $200 USERV DW GBPBHND ; $21A GBPBV DW FINDHND ; $21C FINDV DW FSCHND ; $21E FSCV + DW NULLRTS ; $220 EVENTV + DW NULLRTS ; $222 + DW NULLRTS ; $224 + DW NULLRTS ; $226 + DW NULLRTS ; $228 + DW NULLRTS ; $22A + DW NULLRTS ; $22C + DW NULLRTS ; $22E + DW NULLRTS ; $230 SPARE1V + DW NULLRTS ; $232 SPARE2V + DW NULLRTS ; $234 SPARE3V ENDVEC * @@ -406,22 +422,22 @@ ENDVEC * Base of API entries here in loaded code MOSVEC * Real base of API entries in real memory -MOSAPI EQU $FFB6 +MOSAPI EQU $FF95 ORG MOSAPI * OPTIONAL ENTRIES * ---------------- -*OSSERV JMP SERVICE ; FF95 OSSERV -*OSCOLD JMP NULLRTS ; FF98 OSCOLD -*OSPRSTR JMP OUTSTR ; FF9B OSPRSTR -*OSFF9E JMP NULLRTS ; FF9E -*OSSCANHEX JMP RDHEX ; FFA1 SCANHX -*OSFFA4 JMP NULLRTS ; FFA4 -*OSFFA7 JMP NULLRTS ; FFA7 -*PRHEX JMP OUTHEX ; FFAA PRHEX -*PR2HEX JMP OUT2HEX ; FFAD PR2HEX -*OSFFB0 JMP NULLRTS ; FFB0 -*OSWRRM JMP NULLRTS ; FFB3 OSWRRM +OSSERV JMP SERVICE ; FF95 OSSERV +OSCOLD JMP NULLRTS ; FF98 OSCOLD +OSPRSTR JMP OUTSTR ; FF9B OSPRSTR +OSSCANDEC JMP SCANDEC ; FF9E SCANDEC +OSSCANHEX JMP SCANHEX ; FFA1 SCANHEX +OSFFA4 JMP NULLRTS ; FFA4 (DISKACC) +OSFFA7 JMP NULLRTS ; FFA7 (DISKCCP) +PRHEX JMP OUTHEX ; FFAA PRHEX +PR2HEX JMP OUT2HEX ; FFAD PR2HEX +OSFFB0 JMP NULLRTS ; FFB0 (USERINT) +OSWRRM JMP NULLRTS ; FFB3 OSWRRM * COMPULSARY ENTRIES * ------------------ diff --git a/auxmem.mosequ.s b/auxmem.mosequ.s index 2b953a8..3e0d182 100644 --- a/auxmem.mosequ.s +++ b/auxmem.mosequ.s @@ -16,55 +16,53 @@ * $E0-$EE Internal MOS workspace * $EF-$FF MOS API workspace -FSFLAG1 EQU $E2 -FSFLAG2 EQU $E3 -GSFLAG EQU $E4 -GSCHAR EQU $E5 -OSTEXT EQU $E6 ; $E6 => text string -MAXLEN EQU OSTEXT+2 ; $E8 -MINCHAR EQU OSTEXT+3 ; $E9 -MAXCHAR EQU OSTEXT+4 ; $EA -OSTEMP EQU $EB ; $EB -OSKBD1 EQU $EC ; $EC kbd ws -OSKBD2 EQU OSKBD1+1 ; $ED kbd ws -OSKBD3 EQU OSKBD1+2 ; $EE kbd ws -OSAREG EQU $EF ; $EF A register -OSXREG EQU OSAREG+1 ; $F0 X register -OSYREG EQU OSXREG+1 ; $F1 Y register -OSCTRL EQU OSXREG ; $F0 (XY)=>control block -OSLPTR EQU $F2 ; $F2 => command line +FSFLAG1 EQU $E2 +FSFLAG2 EQU $E3 +GSFLAG EQU $E4 ; $E4 GSREAD processing flags +GSCHAR EQU $E5 ; $E5 GSREAD accumulator +OSTEXT EQU $E6 ; $E6 => text string $E6 OSNUM+0 +MAXLEN EQU OSTEXT+2 ; $E8 $E8 OSNUM+2 +MINCHAR EQU OSTEXT+3 ; $E9 $E9 OSNUM+3 +MAXCHAR EQU OSTEXT+4 ; $EA $EA OSPAD +OSTEMP EQU $EB ; $EB +OSKBD1 EQU $EC ; $EC kbd ws +OSKBD2 EQU OSKBD1+1 ; $ED kbd ws +OSKBD3 EQU OSKBD1+2 ; $EE kbd ws +OSAREG EQU $EF ; $EF A register +OSXREG EQU OSAREG+1 ; $F0 X register +OSYREG EQU OSXREG+1 ; $F1 Y register +OSCTRL EQU OSXREG ; $F0 (XY)=>control block +OSLPTR EQU $F2 ; $F2 => command line * -OSINTWS EQU $FA ; $FA IRQ ZP pointer, use when IRQs off -OSINTA EQU $FC ; $FC IRQ register A store -FAULT EQU $FD ; $FD Error message pointer -ESCFLAG EQU $FF ; $FF Escape status +OSINTWS EQU $FA ; $FA IRQ ZP pointer, use when IRQs off +OSINTA EQU $FC ; $FC IRQ register A store +FAULT EQU $FD ; $FD Error message pointer +ESCFLAG EQU $FF ; $FF Escape status * $0200-$0235 Vectors -* $0236-$028F OSBYTE variables +* $0236-$028F OSBYTE variables ($190+BYTENUM) * $0290-$02ED * $02EE-$02FF MOS control block -USERV EQU $200 ; USER vector -BRKV EQU $202 ; BRK vector -CLIV EQU $208 ; OSCLI vector -BYTEV EQU $20A ; OSBYTE vector -WORDV EQU $20C ; OSWORD vector -WRCHV EQU $20E ; OSWRCH vector -RDCHV EQU $210 ; OSRDCH vector -FILEV EQU $212 ; OSFILE vector -ARGSV EQU $214 ; OSARGS vector -BGETV EQU $216 ; OSBGET vector -BPUTV EQU $218 ; OSBPUT vector -GBPBV EQU $21A ; OSGBPB vector -FINDV EQU $21C ; OSFIND vector -FSCV EQU $21E ; FSCV misc file ops - -BYTEVARBASE EQU $190 ; Base of OSBYTE variables -OSFILECB EQU $2EE ; OSFILE control block - - - +USERV EQU $200 ; USER vector +BRKV EQU $202 ; BRK vector +CLIV EQU $208 ; OSCLI vector +BYTEV EQU $20A ; OSBYTE vector +WORDV EQU $20C ; OSWORD vector +WRCHV EQU $20E ; OSWRCH vector +RDCHV EQU $210 ; OSRDCH vector +FILEV EQU $212 ; OSFILE vector +ARGSV EQU $214 ; OSARGS vector +BGETV EQU $216 ; OSBGET vector +BPUTV EQU $218 ; OSBPUT vector +GBPBV EQU $21A ; OSGBPB vector +FINDV EQU $21C ; OSFIND vector +FSCV EQU $21E ; FSCV misc file ops +BYTEVARBASE EQU $190 ; Base of OSBYTE variables +OSFILECB EQU $2EE ; OSFILE control block +* $0300-$03DF +* $03E0-$03FF Used for interfacing with ProDOS XFER diff --git a/auxmem.oscli.s b/auxmem.oscli.s index 5b8a68b..dadf915 100644 --- a/auxmem.oscli.s +++ b/auxmem.oscli.s @@ -7,6 +7,7 @@ * Prepares parameters and hands on to API call * 24-Aug-2021 Combined *LOAD and *SAVE, full address parsing. * 02-Sep-2021 *LOAD/*SAVE now uses GSTRANS. +* 12-Sep-2021 *HELP uses subject lookup, *HELP MOS, *HELP HOSTFS. * COMMAND TABLE @@ -56,8 +57,8 @@ CMDTABLE ASC 'CAT' ; Must be first command so matches '*.' DB $80 DW STARQUIT-1 ; QUIT -> (LPTR)=>params ASC 'HELP' - DB $80 - DW STARHELP-1 ; HELP -> (LPTR)=>params + DB $FF + DW STARHELP-1 ; HELP -> XY=>params ASC 'BASIC' DB $80 DW STARBASIC-1 ; BASIC -> (LPTR)=>params @@ -73,6 +74,16 @@ CMDTABLE ASC 'CAT' ; Must be first command so matches '*.' * terminator DB $FF +* *HELP TABLE +************* +HLPTABLE ASC 'MOS' + DB $80 + DW HELPMOS-1 ; *HELP MOS + ASC 'HOSTFS' + DB $80 + DW HELPHOSTFS-1 ; *HELP HOSTFS + DB $FF + * Command table lookup * On entry, (OSLPTR)=>command string @@ -341,66 +352,55 @@ XYtoLPTR STX OSLPTR+0 RTS * Print *HELP text -* These needs tidying a bit -STARHELP PHY - JSR PRHELLO ; Unifiy version message -* LDA #<:MSG -* LDY #>:MSG -* JSR PRSTR - PLY - PHY - LDA (OSLPTR),Y - CMP #'.' ; *HELP . - BEQ STARHELP1 - INY - EOR (OSLPTR),Y - INY - EOR (OSLPTR),Y - AND #$DF - CMP #$51 ; *HELP MOS - BNE STARHELP5 -STARHELP1 LDX #0 - LDA #32 - JSR OSWRCH - JSR OSWRCH -STARHELPLP1 LDY #10 - LDA CMDTABLE,X - BMI STARHELP4 -STARHELPLP2 LDA CMDTABLE,X - BMI STARHELP3 - JSR OSWRCH - DEY - INX - BNE STARHELPLP2 -STARHELP3 LDA #32 - JSR OSWRCH - DEY - BNE STARHELP3 - INX - INX - INX - BNE STARHELPLP1 -STARHELP4 LDA #$08 - JSR OSWRCH - JSR OSWRCH - JSR FORCENL -STARHELP5 LDA $8006 - BMI STARHELP6 ; Use ROM's service entry +STARHELP JSR XYtoLPTR ; (OSLPTR),Y=>parameters + JSR PRHELLO ; Unify version message + LDX #command table + LDY #>HLPTABLE + JSR CLILOOKUP ; Look for *HELP subject + LDA $8006 ; Does ROM have service entry? + BMI STARHELP6 ; Yes, send service call JSR OSNEWL LDA #$09 ; Language name LDY #$80 ; *TO DO* make this and BYTE8E JSR PRSTR ; use same code JSR OSNEWL -* LDA #<:MSG2 -* LDY #>:MSG2 -* JSR PRSTR -STARHELP6 PLY +STARHELP6 LDY #0 ; (OSLPTR),Y=>parameters LDA #9 JMP SERVICE ; Pass to sideways ROM(s) -*:MSG DB $0D -* ASC 'Applecorn MOS v0.01' -* DB $0D,$00 -*:MSG2 DB $0D,$00 + + +HELPHOSTFS LDX #FSCCOMMAND + BNE HELPLIST +HELPMOS LDX #CMDTABLE + +HELPLIST STX OSTEXT+0 ; Start of command table + STY OSTEXT+1 + LDX #0 +HELPLP1 LDA #32 + JSR OSWRCH + JSR OSWRCH +HELPLP2 LDY #10 +HELPLP3 LDA (OSTEXT,X) + BMI HELPLP4 + JSR OSWRCH + DEY + JSR CLISTEP + BPL HELPLP3 +HELPLP4 LDA #32 + JSR OSWRCH + DEY + BNE HELPLP4 + JSR CLISTEP + JSR CLISTEP + JSR CLISTEP + BPL HELPLP2 +STARHELP4 LDA #$08 + JSR OSWRCH + JSR OSWRCH + JMP FORCENL + * Handle *QUIT command STARQUIT >>> XF2MAIN,QUIT @@ -411,23 +411,6 @@ STARLOAD PHA ; Entered with A=$FF - LOAD JSR XYtoLPTR ; OSLPTR=>filename JSR SKIPWORD ; Step past filename BNE STARLDSV3 ; filename followed by addr - -** replace with with GSREAD -* LDA (OSLPTR),Y -* CMP #34 -* BEQ STARLDSVA -* LDA #32 -*STARLDSVA STA OSTEMP -*STARLDSV0 INY -* LDA (OSLPTR),Y -* CMP #13 -* BEQ STARLDSV1 -* CMP OSTEMP -* BNE STARLDSV0 ; Step past filename -* JSR SKIPSPC1 ; Skip following spaces -* BNE STARLDSV3 ; *load/save name addr -** ^^^^ - * * filename followed by no address, must be *LOAD name STARLDSV1 LDA #$FF ; $FF=load to file's address @@ -507,78 +490,37 @@ STARKEY STARDONE RTS -** Code that calls this will need to be replaced with calls -** to SKIPSPC and GSREAD -** -** Consume spaces in command line. Treat " as space! -** Return C set if no space found, C clear otherwise -** Command line pointer in (ZP1),Y -EATSPC -* LDA (ZP1),Y ; Check first char is ... -* CMP #' ' ; ... space -* BEQ :START -* CMP #'"' ; Or quote mark -* BEQ :START -* BRA :NOTFND -*:START INY -*:L1 LDA (ZP1),Y ; Eat any additional ... -* CMP #' ' ; ... spaces -* BEQ :CONT -* CMP #'"' ; Or quote marks -* BNE :DONE -*:CONT INY -* BRA :L1 -*:DONE CLC -* RTS -*:NOTFND SEC - RTS - - -** TEST CODE ** -ECHO PHY - CLC - JSR ECHO0 - PLY +* *ECHO +************************ +ECHO +* PHY +* CLC +* JSR ECHO0 +* PLY SEC ECHO0 JSR GSINIT - PHP - PLA - JSR OUTHEX +* PHP +* PLA +* JSR OUTHEX ECHOLP1 JSR GSREAD - BCS ECHO3 - CMP #$20 - BCC ECHO2 - CMP #$7F - BCS ECHO2 + BCS STARDONE +* BCS ECHO3 +* CMP #$20 +* BCC ECHO2 +* CMP #$7F +* BCS ECHO2 JSR OSWRCH JMP ECHOLP1 -ECHO2 PHA - LDA #'<' - JSR OSWRCH - PLA - JSR OUTHEX - LDA #'>' - JSR OSWRCH - JMP ECHOLP1 -ECHO3 PHP - PLA - JSR OUTHEX - JMP OSNEWL - - - - - - - - - - - - - - - - - - +*ECHO2 PHA +* LDA #'<' +* JSR OSWRCH +* PLA +* JSR OUTHEX +* LDA #'>' +* JSR OSWRCH +* JMP ECHOLP1 +*ECHO3 +* PHP +* PLA +* JSR OUTHEX +* JMP OSNEWL diff --git a/auxmem.vdu.s b/auxmem.vdu.s index 1d7b071..4e4a75d 100644 --- a/auxmem.vdu.s +++ b/auxmem.vdu.s @@ -36,18 +36,10 @@ VDUADDR EQU VDUSTATUS+4 ; $D4 address of current char cell * VDU DRIVER MAIN WORKSPACE *************************** -FXLINES EQU BYTEVARBASE+217 ; Pages scrolling line counter +FXLINES EQU BYTEVARBASE+217 ; Paged scrolling line counter FXVDUQLEN EQU BYTEVARBASE+218 ; Length of pending VDU queue VDUVARS EQU $290 -* *TEMP* -FLASHER EQU $290 ; flash counter for cursor -> BYTEVARBASE+193 -> KBD -CURSOR EQU $291 ; character used for cursor -> VDUVAR+?? -CURSORED EQU $292 ; character used for edit cursor -> VDUVAR+?? -CURSORCP EQU $293 ; character used for copy cursor -> VDUVAR+?? -OLDCHAR EQU $294 ; character under cursor -> KBD? -COPYCHAR EQU $295 ; character under copy cursor -> KBD? - VDUTWINL EQU VDUVARS+$08 ; # text window left VDUTWINB EQU VDUVARS+$09 ; # text window bottom \ window VDUTWINR EQU VDUVARS+$0A ; # text window right / size @@ -62,9 +54,11 @@ VDUTEXTX EQU VDUVARS+$18 ; absolute POS VDUTEXTY EQU VDUVARS+$19 ; absolute VPOS VDUCOPYX EQU VDUVARS+$1A ; absolute COPY cursor X posn VDUCOPYY EQU VDUVARS+$1B ; absolute COPY cursor Y posn -* CURSOR -* CURSORED -* CURSORCP +* +CURSOR EQU VDUVARS+$20 ; *TEMP* character used for cursor +CURSORED EQU VDUVARS+$21 ; *TEMP* character used for edit cursor +CURSORCP EQU VDUVARS+$22 ; *TEMP* character used for copy cursor +* VDUQ EQU VDUVARS+$27 ; *TEMP* $27..$2F @@ -82,7 +76,7 @@ OUTCHAR LDX FXVDUQLEN BCC CTRLCHAR ; <$20 - control char BIT VDUSTATUS BMI OUTCHEXIT ; VDU disabled - JSR PRCHRC ; Store char, checking keypress +OUTCHARCP JSR PRCHRC ; Store char, checking keypress JSR VDU09 ; Move cursor right OUTCHEXIT LDA VDUSTATUS LSR A ; Return Cy=Printer Echo Enabled @@ -153,9 +147,8 @@ VDU02 BNE SETSTATUS * VDU 5 - Text at graphics cursor -VDU05 LDX VDUBYTES - DEX - BEQ SETEXIT ; 1 byte per char, text only +VDU05 LDX VDUPIXELS + BEQ SETEXIT ; 0 pixels per char, text only * Turn cursor off and other stuff LDA #$20 ; Set VDU 5 mode BNE SETSTATUS @@ -626,10 +619,3 @@ BYTEA0 LDY #79 ; Read VDU variable $09,$0A LDX #23 RTS * TEST - - - - - - -