mirror of
https://github.com/Tolik-Trek/ZX-SP-ROMs.git
synced 2026-06-15 09:21:45 +03:00
383 lines
6.4 KiB
NASM
Executable File
383 lines
6.4 KiB
NASM
Executable File
; device zxspectrum48
|
|
INCLUDE 'inc/rom_routines.inc'
|
|
INCLUDE 'Shared_Includes/constants/ZX_VARS.inc'
|
|
INCLUDE 'Shared_Includes/constants/zx_char_codes.inc'
|
|
|
|
;=======================================================================
|
|
collor_A EQU 0x03
|
|
collor_B EQU 0x02
|
|
collor_N EQU 0x04
|
|
collor_M EQU 0x08
|
|
collor_T EQU 0x07
|
|
org_addr EQU #5d3b
|
|
|
|
|
|
ORG org_addr
|
|
|
|
bstart: DW #100 ; line number = 1
|
|
DW l1end-l1begin ; line length
|
|
l1begin: DB ZX_Token.randomize,ZX_Token.usr,"0" ; 'rand' 'usr' 0
|
|
DB ZX_Char.number
|
|
DB #00,#00 : DW start : DB #00 ; start address
|
|
DB ZX_Char.carriage_return
|
|
l1end: DW #200 ; line number = 2
|
|
DW l2end-l2begin ; line length
|
|
l2begin: DB ZX_Token.randomize,ZX_Token.usr,"0" ; ':' 'rand' 'usr' 0
|
|
DB ZX_Char.number
|
|
DB #00,#00 : DW 15619 : DB #00 ; start address
|
|
DB ":",ZX_Token.rem,":",ZX_Token.run,'"'
|
|
filename: DB "boot ",'"',":" ; ':' 'rem' run
|
|
;=======================================================================
|
|
|
|
;org #5d65
|
|
start: LD (memSP),SP
|
|
NewDisk: ;CALL clear_screen
|
|
LD BC,#0905
|
|
LD DE,0
|
|
LD HL,catBuff
|
|
CALL #3D13
|
|
LD A,"a"
|
|
LD (main.markPos),A
|
|
LD A,1
|
|
JP keys.setCP
|
|
;
|
|
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
ALIGN #10
|
|
TXT_BUTTONS:
|
|
.prev: DB '<<< PgUp'
|
|
.next: DB 'PgDn >>>'
|
|
;
|
|
main.CurrentPage:
|
|
DB 1
|
|
main.PagesCounter:
|
|
DB 1
|
|
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
main: LD A,(.CurrentPage)
|
|
LD (.PagesCounter),A
|
|
.nextLoop: CALL PRINT_HELP
|
|
LD A,collor_T
|
|
LD (var_collor),A
|
|
LD HL,#50CC
|
|
LD (var_printPos),HL
|
|
LD HL,catBuff + #08F5
|
|
|
|
|
|
LD B,8
|
|
.p1: LD A,(HL)
|
|
PUSH HL
|
|
CALL printChar
|
|
POP HL
|
|
INC L
|
|
DJNZ .p1
|
|
; LD A,L
|
|
; CP low (catBuff + #08FD)
|
|
; JR NZ,.p1
|
|
|
|
LD HL,#4000
|
|
LD (var_printPos),HL
|
|
; ¢ëç¨âë¢ ¨¥ ª â «®£
|
|
.buffPointer+1: LD HL,catBuff
|
|
.markPos+2: LD BC,"aa"
|
|
.l1: LD A,(HL)
|
|
DEC A
|
|
JR Z,.nextRec
|
|
;
|
|
JP M,DirShowDone
|
|
;
|
|
SET 3,L
|
|
LD A,(HL)
|
|
CP "B"
|
|
RES 3,L
|
|
JR NZ,.nextRec
|
|
; ¤¢¥ á¯¥æ ª®¯ª¨
|
|
LD A,C ; C - ⥪ã騩 ä ©«
|
|
CP "y"
|
|
JR NC,PRINT_NEXT_BUTTONS ; "::PREV::" "::NEXT::"
|
|
;
|
|
; ¯à®å®¤®© ¯à®£®?
|
|
LD A,(.PagesCounter)
|
|
DEC A
|
|
JR NZ,.nextHiddenRec
|
|
; basic file
|
|
LD A,C
|
|
CP B ; ¢ë¡à ë© ä ©«
|
|
LD A,collor_A
|
|
JR NZ,.notMarked
|
|
; ¢ë¤¥«¥¨¥ ä ©« ¨ ª®¯¨à®¢ ¨¥ ¥£® ¢ áâப㠧 ¯ãáª
|
|
XOR collor_M
|
|
;
|
|
LD DE,filename
|
|
PUSH BC
|
|
LD BC,8
|
|
LDIR
|
|
POP BC
|
|
RES 3,L
|
|
;
|
|
.notMarked: CALL prn_txt
|
|
.nextHiddenRec: INC C
|
|
.nextRec: LD DE,#10
|
|
ADD HL,DE
|
|
JR .l1
|
|
;
|
|
|
|
PRINT_NEXT_BUTTONS:
|
|
LD A,(main.PagesCounter)
|
|
LD (keys.nxtPage),A
|
|
DEC A
|
|
;JR Z,.noChange
|
|
JR Z,keys
|
|
LD (main.PagesCounter),A
|
|
LD (main.buffPointer),HL
|
|
.noChange: ;PUSH AF
|
|
;CALL PRINT_HELP
|
|
;POP AF
|
|
;JP Z,keys
|
|
JR keys.toMain
|
|
|
|
PRINT_HELP: LD HL,#5040
|
|
LD (var_printPos),HL
|
|
LD A,collor_N
|
|
PUSH BC
|
|
LD C," "
|
|
LD HL,TXT_BUTTONS.prev
|
|
CALL prn_txt
|
|
;
|
|
LD A,collor_N
|
|
CALL prn_txt
|
|
;
|
|
POP BC
|
|
RET
|
|
|
|
;
|
|
DirShowDone: XOR A
|
|
LD (keys.nxtPage),A
|
|
;CALL PRINT_HELP
|
|
keys: RES 5,(iy+1)
|
|
.w1: BIT 5,(iy+1)
|
|
JR Z,.w1
|
|
LD A,(iy-#32)
|
|
;
|
|
CP B
|
|
JR Z,exit
|
|
CP #0D ; enter
|
|
JR Z,exit
|
|
CP " " ; space
|
|
JP Z,NewDisk
|
|
;
|
|
CP #04 ; pgUp
|
|
LD E,-1
|
|
JR Z,.prevPage
|
|
;
|
|
.pgdn: CP #05 ; pgDn
|
|
LD E,1
|
|
JR Z,.nextPage
|
|
;
|
|
.left: CP #08 ; left
|
|
JR NZ,.sl
|
|
DEC B
|
|
JR .c1
|
|
;
|
|
.sl: CP #0B ; up
|
|
JR NZ,.sd
|
|
DEC B
|
|
DEC B
|
|
DEC B
|
|
JR .c1
|
|
;
|
|
.sd: CP #0A ; down
|
|
JR NZ,.su
|
|
INC B
|
|
INC B
|
|
INC B
|
|
JR .c1
|
|
;
|
|
.su: CP #09 ; right
|
|
JR NZ,.sr
|
|
INC B
|
|
JR .c1
|
|
;
|
|
.sr: CP "a"
|
|
JR C,keys
|
|
CP C
|
|
JR NC,keys
|
|
LD B,A
|
|
;
|
|
.c1: LD A,B
|
|
CP "a"
|
|
JR NC,.sf1
|
|
LD A,"a"
|
|
.sf1: CP C
|
|
JR C,.sf2
|
|
LD A,C
|
|
DEC A
|
|
.sf2: LD (main.markPos),A
|
|
.toMain: JP main.nextLoop
|
|
|
|
; DE - +24 or -24
|
|
.nextPage: ;
|
|
.nxtPage+1: LD A,0
|
|
AND A
|
|
JR Z,.skip
|
|
XOR A
|
|
LD (.nxtPage),A
|
|
;
|
|
; DE - +24 or -24
|
|
.prevPage: LD A,(main.CurrentPage)
|
|
ADD A,E
|
|
JR Z,.skip
|
|
;
|
|
.setCP: LD H,A
|
|
LD L,A
|
|
LD (main.CurrentPage),HL
|
|
LD HL,catBuff
|
|
LD (main.buffPointer),HL
|
|
.skip: CALL clear_screen
|
|
JR .toMain
|
|
|
|
|
|
|
|
exit: LD A,C
|
|
CP "a"
|
|
JP Z,NewDisk
|
|
memSP+1: LD SP,0
|
|
RET
|
|
|
|
printChar: LD H,A
|
|
ADD A,A
|
|
ADD A,A
|
|
ADD A,A
|
|
LD L,A
|
|
LD A,H
|
|
RLCA
|
|
RLCA
|
|
RLCA
|
|
AND 0x07
|
|
ADD A,0x3c
|
|
LD H,A
|
|
var_printPos+1: LD DE,0x4000
|
|
|
|
.l1: LD A,(HL)
|
|
RRCA
|
|
OR (HL)
|
|
INC HL
|
|
LD (DE),A
|
|
INC D
|
|
LD (DE),A
|
|
INC D
|
|
LD A,D
|
|
AND 0x07
|
|
JR NZ,.l1
|
|
LD A,D
|
|
SUB 0x08
|
|
LD D,A
|
|
LD A,E
|
|
ADD A,0x20
|
|
LD E,A
|
|
AND 0x20
|
|
JR NZ,.l1
|
|
LD HL,(var_printPos)
|
|
LD A,H
|
|
RRCA
|
|
RRCA
|
|
RRCA
|
|
ADD A,0x50
|
|
LD H,A
|
|
var_collor+1: LD A,0
|
|
LD (HL),A
|
|
SET 5,L
|
|
XOR collor_A ^ collor_B
|
|
LD (HL),A
|
|
;
|
|
LD HL,var_printPos
|
|
LD A,(HL)
|
|
ADD A,0x21
|
|
AND 0xdf
|
|
LD (HL),A
|
|
RET NZ
|
|
INC HL
|
|
LD A,(HL)
|
|
ADD A,0x08
|
|
LD (HL),A
|
|
RET
|
|
;
|
|
;
|
|
|
|
clear_screen: XOR A
|
|
OUT (0xfe),A
|
|
LD (ZX_VARS.ATTR_P),A
|
|
LD (ZX_VARS.BORDER),A
|
|
JP BASIC_FN.x48.cls
|
|
|
|
; A - current file
|
|
; choose_color: CP B ; ¢ë¡à ë© ä ©«. #C7
|
|
; LD A,collor_A
|
|
; SCF
|
|
; RET NZ
|
|
; XOR collor_M
|
|
; RET
|
|
|
|
|
|
; A - COLOR
|
|
; C - char of text button
|
|
; HL - Text
|
|
prn_txt: LD (var_collor),A
|
|
LD A,C
|
|
PUSH HL
|
|
CALL printChar
|
|
LD A," "
|
|
CALL printChar
|
|
POP HL
|
|
;
|
|
.loop: LD A,(HL)
|
|
INC HL
|
|
PUSH HL
|
|
CALL printChar
|
|
POP HL
|
|
LD A,L
|
|
AND 0x07
|
|
JR NZ,.loop
|
|
;
|
|
LD A,(var_printPos)
|
|
AND 0x1f
|
|
RET Z
|
|
LD A," "
|
|
PUSH HL
|
|
CALL printChar
|
|
POP HL
|
|
RET
|
|
;
|
|
;
|
|
|
|
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; ALIGN #10
|
|
; TXT_BUTTONS:
|
|
; .prev: DB '<< PgDn '
|
|
; .next: DB '>> PgUp '
|
|
; ;
|
|
; main.CurrentPage:
|
|
; DB 1
|
|
; main.PagesCounter:
|
|
; DB 1
|
|
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
StartLineNum: DB 0
|
|
DW 0
|
|
;DB #80
|
|
l2end:
|
|
;bend:
|
|
DISPLAY "printChar ",/A,$-printChar
|
|
DISPLAY "code ",/A,$-start
|
|
;ds -$&0x0f
|
|
;ALIGN #10
|
|
;filename EQU $
|
|
catBuff EQU #6000 ;$ + (-$&0x0f)
|
|
|
|
ASSERT l2end < catBuff,"ERROR!!! Code leaks to catBuff"
|
|
EXPORT StartLineNum
|
|
EXPORT org_addr
|
|
; |