diff --git a/NOTES.txt b/NOTES.txt new file mode 100644 index 0000000..179a688 --- /dev/null +++ b/NOTES.txt @@ -0,0 +1,43 @@ +Count: +* Enable/disable hilights - data bytes, header bytes, non-zero invalid bytes + +Save/Load Settings? + + + +Memory map: +$0000 - $00FF ZP +$0200 - $02FF Input +$0300 - $03FF Settings? +$0400 - $07FF Text +$0800 - $1FFF Working buffer +$2000 - $3FFF HGR +$4000 - $5FFF Track buffer +$6000+ Program + + + +Reserved - D5 AA + +13 sector - 32 bytes ("exact" mapping) +16 sector - 64 bytes ("additional requirement" to get to 64 bytes) + +Fields: +Address Field: D5 AA 96 ... DE AA EB +Data Field: D5 AA AD ... DE AA EB + + +Always: +====== +OA Q = Quit +OA * = Monitor +OA A,B,C,F,G = Page navigation + + +Decide per page: +=============== +<-, ->, R, S = track management routine + +Controlled by page init: (embedded in display component) +======================= +^, v, OA ^, OA v = page navigation routine diff --git a/afscanner.s b/afscanner.s index a073598..1d386aa 100755 --- a/afscanner.s +++ b/afscanner.s @@ -43,6 +43,9 @@ FAILBYTS = 6656 ; Number of bytes before failure * 80 column card / print controls: +HTAB = $57B ; set +VTAB = $FB5B ; call with Acc. + _PRBYTE = 1 ; print byte @ addr _CLS = $8C ; clear screen _INVERSE = $8F diff --git a/page-test.s b/page-test.s index 27ffc4a..d16ab4b 100755 --- a/page-test.s +++ b/page-test.s @@ -11,20 +11,22 @@ * TestInit + jsr NewPrint + asc "%v",$17,"Bottom Line? %m@ (open apple)",$00 + lda #>535 ldy #<535 ; Nice odd number of lines > 256 rts TestDisplay - phy - pha - lda #_CLREOL - jsr COUT - pla - jsr PRHEX - pla - jsr PRHEX - jmp PRCR + sty DATA + sta DATA+1 + + jsr NewPrint + asc "%w" + da DATA + dfb $8D,0 + rts TestKeypress jmp KeyboardWait diff --git a/util.s b/util.s index c4e41b2..32bf20d 100755 --- a/util.s +++ b/util.s @@ -187,3 +187,123 @@ HandleKey lda TEMP sec rts + + + +************************* Test Code ************************** +; Characters - assumption is a character unless % encountered +; %(byte < $80) = repeat next character +; %w = hex word +; %b = hex byte +; %% = % +; %i = inverse +; %n = normal +; %mC = C as mouse text (mouse text on, inverse, C, normal, mouse text off) +; %h# = HTAB, # is 0..79 +; %v# = VTAB, # is 0..23 +; %H = home cursor +; %C = clear screen and home cursor +; %E = clear to EOL +; +NewPrint + pla + sta PTR + pla + sta PTR+1 + jsr IncPTR + jsr NewPrintX + jmp (PTR) + +NewPrintP + sta PTR+1 + stx PTR + +NewPrintX +:next jsr FetchPTR + cmp #0 ; Fetch loses the status bits + beq :exit + cmp #"%" + beq :specl +:cout jsr COUT + bra :next + +:exit rts + +:specl jsr FetchPTR + bpl :repeat + ldx :subcmd +:look cmp :subcmd,x + beq :dsptch + dex + bne :look + beq :dsptc0 ; X=0 which is %% code as well + +:repeat tax + jsr FetchPTR +:rep0 jsr COUT + dex + bne :rep0 + beq :next + +:dsptch dex ; we're +1 because the lookup table is a STR (length byte at beginning) +:dsptc0 txa + asl ; times 2 + tax + jmp (:addrs,x) + +:chrout asl ; requires these to be first in :subcmd + tax + lda :lookup,x + bra :cout + +:mtext jsr FetchPTR + sta :mt_out+2 + ldy #0 +:mtext0 lda :mt_out,y + jsr COUT + iny + cpy #5 + bne :mtext0 + bra :next + +:htab jsr FetchPTR + sta HTAB + bra :next +:vtab jsr FetchPTR + jsr VTAB + bra :next +:prbyte jsr SetPTR2 +:lowb lda (PTR2) + jsr PRHEX + bra :next +:prword jsr SetPTR2 + ldy #1 + lda (PTR2),y + jsr PRHEX + bra :lowb + +; data tables to make relative branches last longer +:subcmd str "%inHCEmhvbw" +:addrs lup 6 ; 1st set are a character replacement + da :lookup + --^ + da :mtext + da :htab + da :vtab + da :prbyte + da :prword +:lookup asc "%",_NORMAL,_INVERSE,_CLS,_HOME,_CLREOL +:mt_out dfb _MT_ON,_INVERSE,0,_NORMAL,_MT_OFF + +SetPTR2 jsr FetchPTR + sta PTR2 + jsr FetchPTR + sta PTR2+1 + rts + +FetchPTR + lda (PTR) +IncPTR inc PTR + bne :exit + inc PTR+1 +:exit rts \ No newline at end of file