diff --git a/applecorn.po b/applecorn.po index 069e073..3f20939 100644 Binary files a/applecorn.po and b/applecorn.po differ diff --git a/auxmem.init.s b/auxmem.init.s index d260048..995b023 100644 --- a/auxmem.init.s +++ b/auxmem.init.s @@ -224,5 +224,5 @@ BYTE00 BEQ BYTE00A ; OSBYTE 0,0 - generate error RTS ; %000x1xxx host type, 'A'pple BYTE00A BRK DB $F7 -HELLO ASC 'Applecorn MOS 2022-01-08' +HELLO ASC 'Applecorn MOS 2022-01-09' DB $00 ; Unify MOS messages diff --git a/auxmem.vdu.s b/auxmem.vdu.s index e93a32c..f935bf2 100644 --- a/auxmem.vdu.s +++ b/auxmem.vdu.s @@ -398,6 +398,7 @@ PUTCURSOR TAX ; Preserve character TXA JMP PUTCHRC :SHR TXA ; Recover character +* TODO: Add code for XOR cursor in SHR mode RTS @@ -409,6 +410,7 @@ PUTCOPYCURS TAX ; Preserve character JMP OUTCHARCP :SHR TXA ; Recover character JMP OUTCHARCP2 +* TODO: Add code for XOR copy cursor in SHR mode RTS @@ -523,10 +525,17 @@ SCROLL JSR SCROLLER * Move cursor down VDU10 LDA VDUTEXTY ; ROW CMP TXTWINBOT - BEQ :TOSCRL ; JGH + BEQ VDU10SCRL INC VDUTEXTY ; ROW - RTS -:TOSCRL JMP SCROLL ; JGH + LDA VDUSTATUS + AND #$20 ; Bit 5 -> VDU5 mode + BEQ VDU10DONE + BIT VDUSCREEN + BVC VDU10DONE ; Not SHR, skip + >>> XF2MAIN,SHRVDU10 +VDU10RET >>> ENTAUX +VDU10DONE RTS +VDU10SCRL JMP SCROLL * Move cursor up VDU11 LDA VDUTEXTY ; ROW @@ -548,7 +557,14 @@ VDU13 LDA #$BF JSR CLRSTATUS ; Turn copy cursor off LDA TXTWINLFT STA VDUTEXTX ; COL - RTS + LDA VDUSTATUS + AND #$20 ; Bit 5 -> VDU5 mode + BEQ VDU13DONE + BIT VDUSCREEN + BVC VDU13DONE ; Not SHR, skip + >>> XF2MAIN,SHRVDU13 +VDU13RET >>> ENTAUX +VDU13DONE RTS * Move to (0,0) VDU30 LDA TXTWINTOP diff --git a/mainmem.shr.s b/mainmem.shr.s index bc1af2a..cdfbb4c 100644 --- a/mainmem.shr.s +++ b/mainmem.shr.s @@ -234,13 +234,26 @@ SHRVDU5CH320 >>> ENTMAIN ADC #SHRFONTXPLD STA A1L - LDA SHRYPIXEL ; See if we are too close to bttm - CMP #16 - BCC :NEWPAGE1 ; Less than 16 rows left + LDA SHRYPIXEL ; y coordinate + SEC + SBC #8 ; Height of this row + CMP SHRWINBTM + BMI :NEWPAGE + LDA SHRYPIXEL + CMP SHRWINTOP + BEQ :S1 + BPL :NEWPAGE +:S1 LDA SHRXPIXEL ; x coordinate + CMP SHRWINLFT + BMI :NEWPAGE + CMP SHRWINRGT + BEQ :S0 + BPL :NEWPAGE BRA :S0 -:NEWPAGE1 LDA #199 +:NEWPAGE LDA SHRWINTOP STA SHRYPIXEL - STZ SHRXPIXEL + LDA SHRWINLFT + STA SHRXPIXEL :S0 SEP #$30 ; 8 bit M & X MX %11 ; Tell Merlin @@ -294,24 +307,15 @@ SHRVDU5CH320 >>> ENTMAIN LDA SHRXPIXEL CLC ADC #16 ; Advance to next column - CMP #639-16 + CMP SHRWINRGT BCS :NEWLINE ; X-pos >= limit STA SHRXPIXEL BRA :DONE -:NEWLINE STZ SHRXPIXEL - LDA SHRYPIXEL - CMP #16 - BCC :NEWPAGE2 ; Less than 16 rows left - SEC - SBC #$08 - STA SHRYPIXEL - BRA :DONE -:NEWPAGE2 LDA #199 - STA SHRYPIXEL -:DONE SEC ; 65816 emulation mode +:NEWLINE JSR SHRVDU5LF +:DONE SEC ; 65816 emulation mode XCE + MX %11 ; Tell Merlin PLP - >>> XF2AUX,SHRPRCH320RET * Zero page :CTR1 EQU TMPZP+0 @@ -324,6 +328,59 @@ SHRVDU5CH640 >>> ENTMAIN >>> XF2AUX,SHRPRCH640RET +* Handle linefeed in VDU5 mode +SHRVDU10 >>> ENTMAIN + PHP ; Disable interrupts + SEI + CLC ; 65816 native mode + XCE + REP #$30 ; 16 bit M & X + MX %00 ; Tell Merlin + JSR SHRVDU5LF +:DONE SEC ; 65816 emulation mode + XCE + MX %11 ; Tell Merlin + PLP + >>> XF2AUX,VDU10RET + + +* Handle linefeed in VDU5 mode +* Called in 65816 native mode, 16 bit M & X +SHRVDU5LF MX %00 ; Tell Merlin + LDA SHRWINLFT + STA SHRXPIXEL + LDA SHRYPIXEL + SEC + SBC #16 ; Height of this+next row + CMP SHRWINBTM + BMI :NEWPAGE ; Less than 16 rows left + LDA SHRYPIXEL + SEC + SBC #$08 + STA SHRYPIXEL + BRA :DONE +:NEWPAGE LDA SHRWINTOP + STA SHRYPIXEL +:DONE RTS + MX %11 ; 8 bit again + + +* Handle carriage return in VDU5 mode +SHRVDU13 >>> ENTMAIN + PHP ; Disable interrupts + SEI + CLC ; 65816 native mode + XCE + REP #$30 ; 16 bit M & X + MX %00 ; Tell Merlin + JSR SHRVDU5LF +:DONE SEC ; 65816 emulation mode + XCE + MX %11 ; Tell Merlin + PLP + >>> XF2AUX,VDU13RET + + * Plot actions: PLOT k,x,y * k is in SHRVDUQ+4 * x is in SHRVDUQ+5,SHRVDUQ+6 @@ -423,10 +480,12 @@ SHRPOINT REP #$30 ; 16 bit M & X BMI :OUT CMP SHRWINTOP BEQ :S1 + BPL :OUT :S1 LDA A1L ; x coordinate CMP SHRWINLFT BMI :OUT CMP SHRWINRGT + BEQ SHRPOINT2 BPL :OUT BRA SHRPOINT2 :OUT SEP #$30 ; 8 bit M & X