Всем ГОРЯЧИЙ ПРИВЕТ!
Начал создавать библиотеку ассемблерного доступа к экрану.
Вот видео 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