UserMenu/screen.asm

398 lines
4.8 KiB
NASM
Executable File

;DEBUG
;////////
FVAR DB "1-ST VAR: ",0
SVAR DB "2-ND VAR: ",0
DEBUG_PRINTZ
LD (HL_D_POINT+1),HL
CALL PUSHALL
HL_D_POINT
LD HL,#0000
LD C,Dss.PChars
RST ToDSS
CALL CRLF
CALL POPALL
RET
PUSHALL
EX (SP),HL ;PUSH HL & GET ADDRESS
PUSH DE
PUSH BC
PUSH AF
EXX
PUSH HL
PUSH DE
PUSH BC
EXX
EX AF,AF'
PUSH AF
EX AF,AF'
PUSH IX
PUSH IY
JP (HL) ;JUMP TO ADDRESS (RET)
POPALL
POP HL ;GET ADDRESS
POP IY
POP IX
EX AF,AF'
POP AF
EX AF,AF'
EXX
POP BC
POP DE
POP HL
EXX
POP AF
POP BC
POP DE
EX (SP),HL ;PUT ADDRESS
RET
;////////
;DEBUG
;SHOW WINDOW ARRAY
WIN_SHOW
LD DE,(WIN_XY)
LD A,(WIN_H)
LD H,A
LD A,(WIN_W)
LD L,A
IN A,(#E2)
LD B,A
LD C,Dss.WinRest
LD IX,MYWIN
DI
RST ToDSS
EI
RET
SAVE_POSITION
DW 0
WIN_SAVE
LD C,Dss.Cursor
RST ToDSS
LD (SAVE_POSITION),DE
; RET
;
LD DE,(WIN_XY)
LD A,(WIN_H)
LD H,A
LD A,(WIN_W)
LD L,A
IN A,(#E2)
LD B,A
LD C,Dss.WinCopy
LD IX,SCR_BUF
DI
RST ToDSS
EI
RET
WIN_BACK
LD DE,(WIN_XY)
LD A,(WIN_H)
LD H,A
LD A,(WIN_W)
LD L,A
IN A,(#E2)
LD B,A
LD C,Dss.WinRest
LD IX,SCR_BUF
DI
RST ToDSS
EI
LD DE,(SAVE_POSITION)
LD C,Dss.Locate
RST ToDSS
RET
WIN_CLS
LD HL,0
LD BC,(WIN_W)
; INC BC
; INC BC
LD A,(WIN_H)
OR A
RET Z
MULHGT ADD HL,BC
DEC A
JR NZ,MULHGT
ADD HL,HL
DEC HL
DEC HL
PUSH HL
LD HL,MYWIN
LD D,H
LD E,L
LD A," "
LD (HL),A
INC HL
LD A,(SCR_ATTR)
LD (HL),A
INC HL
EX DE,HL
POP BC
LDIR
RET
WIN_XY
WIN_X DB #16
WIN_Y DB 10
WIN_H DW 7
WIN_W DW 34
WIN_ADDR
DW MYWIN
WIN_CUR_XY
DW 0
WIN_LOCATE
LD (WIN_CUR_XY),DE
LD HL,0
INC D
DEC D
JR Z,TOP_LN
LD BC,(WIN_W)
SLA C
ADDYC1 ADD HL,BC
DEC D
JR NZ,ADDYC1
TOP_LN SLA E
ADD HL,DE
LD DE,MYWIN
ADD HL,DE
LD (WIN_ADDR),HL
RET
WIN_PCHARS
LD A,(HL)
INC HL
OR A
RET Z
CP 13
JR Z,CR_L
CP 10
JR Z,LF_L
CALL WIN_PUTCHAR
JR WIN_PCHARS
CR_L LD DE,(WIN_CUR_XY)
LD D,0
PUSH HL
CALL WIN_LOCATE
POP HL
JR WIN_PCHARS
LF_L LD DE,(WIN_CUR_XY)
INC E
PUSH HL
CALL WIN_LOCATE
POP HL
JR WIN_PCHARS
WIN_PUTCHAR
LD DE,(WIN_ADDR)
LD (DE),A
INC DE
INC DE
LD (WIN_ADDR),DE
RET
CRLF LD A,#0D
LD C,Dss.PutChar
RST #10
LD A,#0A
LD C,Dss.PutChar
RST #10
RET
MESSAGE LD E,A
LD D,0
CALL MESAGE
CALL PRINTZ
RET
MESAGE INC DE
LD HL,MSG0
LD BC,MSG1-MSG0
LCPIR2 XOR A
CPIR
RET PO
RET NZ
DEC DE
LD A,D
OR E
JP NZ,LCPIR2
RET
PRINTZ LD A,(HL)
INC HL
OR A
RET Z
CP "%"
JR NZ,PRINTZ2
LD A,(HL)
INC HL
SUB "1"
PUSH HL
LD L,A
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD BC,PRM1
ADD HL,BC
LD C,Dss.PChars
RST ToDSS
POP HL
JR PRINTZ
PRINTZ2 LD C,Dss.PutChar
RST ToDSS
JP PRINTZ
LOCATE_
LD C,Dss.Locate
RST ToDSS
RET
PRINT_A
PRINT_ LD C,Dss.PutChar
RST ToDSS
RET
MOVEBLOCKZ
LD BC,255
JR PUTPRMA
PUTVAR LD DE,PRM1
PUTPRM LD BC,15
PUTPRMA LD A,(HL)
LDI
RET PO
OR A
JR NZ,PUTPRMA
RET
PRM1 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM2 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM3 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM4 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM5 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM6 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM7 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM8 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM9 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
; PRINT MODULE
DUMP LD B,2
DUMPLP1 PUSH BC
PUSH HL
CALL CRLF
POP HL
CALL PHEXSTR
POP BC
DJNZ DUMPLP1
CALL CRLF
RET
PHEX LD E,A
RRCA
RRCA
RRCA
RRCA
AND #0F
ADD A,#30
CP #3A
JR C,PHEX2
ADD A,7
PHEX2 CALL PRINT_
LD A,E
AND #0F
ADD A,#30
CP #3A
JR C,PHEX3
ADD A,7
PHEX3 CALL PRINT_
RET
PHEXSTR LD B,#10
PHS1 PUSH BC
LD A,(HL)
CALL PHEX
LD A,#20
CALL PRINT_
POP BC
INC HL
DJNZ PHS1
RET
PRINTNUM
LD HL,PRM1
NUMC LD C,"0"-1
NUMC1 INC C
SUB 100
JR NC,NUMC1
ADD A,100
LD (HL),C
INC HL
NUMB LD C,"0"-1
NUMB1 INC C
SUB 10
JR NC,NUMB1
ADD A,10
ADD A,"0"
LD (HL),C
INC HL
LD (HL),A
INC HL
LD (HL),0
RET
PRINT99 LD L,A
LD H,0
JR PRL99
PRINTHL
LD DE,10000
CALL DIGIT
LD DE,1000
CALL DIGIT
LD DE,100
CALL DIGIT
PRL99 LD DE,10
CALL DIGIT
LD A,"0"
ADD A,L
JP PRINT_A
DIGIT LD B,#FF
PH1 INC B
AND A
SBC HL,DE
JR NC,PH1
ADD HL,DE
LD A,"0"
ADD A,B
JP PRINT_A