Всем ГОРЯЧИЙ ПРИВЕТ!
Начал создавать библиотеку ассемблерного доступа к экрану.
Вот видео https://www.youtube.com/watch?v=5CHvHxoi78I&t=3476s
Вот коды:
Код:!====================================! ! BLOKS.LIB zenSoft ! ! Text Screen ! ! Block oriented assembly procedures ! ! for PL65 Programming Language ! !------------------------------------! ! Evgeny Zolotarev,(aka 576XE), 2019 ! !====================================! != Globals ==========================! POINTER src,dst INT SAVMSC=$58,BUFR=$4000 != Block Oriented Procedures ========! !- Save Block to Buffer -------------! PROC saveBlk(BYTE x,y,w,h) BYTE wid,hei BEGIN wid=w hei=h src=SAVMSC+y*40+x-1 dst=.BUFR STX XSAVE LDX #$00 !- Lines treatment ------------------! :nxtln LDY wid !- Bytes treatment ------------------! :nxtby LDA (src),Y STA (dst),Y LDA #$00 STA (src),Y DEY BNE nxtby !- Line_start plus 40 ---------------! CLC LDA src ADC #40 STA src LDA src+1 ADC #$00 STA src+1 !- Add wid to Buffer ----------------! CLC LDA dst ADC wid STA dst LDA dst+1 ADC #$00 STA dst+1 !- To next Line ... -----------------! INX CPX hei BNE nxtln LDX XSAVE END !- Restore Block from Buffer --------! PROC restBlk(BYTE x,y,w,h) BYTE wid,hei BEGIN wid=w hei=h src=.BUFR dst=SAVMSC+y*40+x-1 STX XSAVE LDX #$00 !- Lines treatment ------------------! :nxtln LDY wid !- Bytes treatment ------------------! :nxtby LDA (src),Y STA (dst),Y DEY BNE nxtby !- Line_start plus 40 ---------------! CLC LDA dst ADC #40 STA dst LDA dst+1 ADC #$00 STA dst+1 !- Add wid to Buffer ----------------! CLC LDA src ADC wid STA src LDA src+1 ADC #$00 STA src+1 !- To next Line ... -----------------! INX CPX hei BNE nxtln LDX XSAVE END !- Invert Screen Block --------------! PROC invBlok(BYTE x,y,w,h) BYTE wid,hei BEGIN wid=w hei=h src=SAVMSC+y*40+x-1 STX XSAVE LDX #$00 !- Lines treatment ------------------! :nxtln LDY wid !- Bytes treatment ------------------! :nxtby LDA (src),Y EOR #$80 STA (src),Y DEY BNE nxtby !- Line_start plus 40 ---------------! CLC LDA src ADC #40 STA src LDA src+1 ADC #$00 STA src+1 !- To next Line ... -----------------! INX CPX hei BNE nxtln LDX XSAVE END !====================================! ! End of Library ENDFILE
Надеюсь кому пригодится...Код:!====================================! ! BLOKS.PRG zenSoft ! ! PL65 Programming Language ! !------------------------------------! ! Evgeny Zolotarev,(aka 576XE), 2019 ! !====================================! CONST void=$FF,esc=$1C BYTE CH=$02FC INCLUDE BLOKS.LIB != Miscellaneous Proces & Funcs =====! FUNC readKey() BYTE chr BEGIN WHILE CH=void DO ENDWHILE ! wait... chr=CH CH=void END chr MAIN() BYTE x,y,w,h,c BEGIN x=3 y=3 w=20 h=10 REPEAT c=readKey() IF c=esc THEN RETURN ENDIF invBlok(x,y,w,h) c=readKey() IF c=esc THEN RETURN ENDIF invBlok(x,y,w,h) c=readKey() IF c=esc THEN RETURN ENDIF saveBlk(x,y,w,h) c=readKey() IF c=esc THEN RETURN ENDIF restBlk(x,y,w,h) FOREVER END
zen


Ответить с цитированием

Размещение рекламы на форуме способствует его дальнейшему развитию 

