ZX-SP-ROMs/ZX_EXP/EXP_FN2.ASM
2024-08-19 05:14:10 +10:00

732 lines
11 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;*****************************************************************
;
; ”㭪樨 à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨.
;
;*****************************************************************
; Ž¯à¥¤¥«¥­¨¥ ®¡ê¥¬  ¯ ¬ïâ¨.
; ‚ë室: BC - FREE MEM ¢ ¡«®ª å ¯® 16k, HL - FULL MEM
;*****************************************************************
EMM_FN0:
IN A,(PAGE2)
LD B,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD HL,RAMD_FAT-4000H
LD C,0
EMM_FN0_L1:
LD A,(HL)
INC L
JR Z,EMM_FN0_L2
AND A
JR NZ,EMM_FN0_L1
INC C
JR EMM_FN0_L1
EMM_FN0_L2:
LD HL,100H
LD A,B
LD B,0
OUT (PAGE2),A
RET
;
;*****************************************************************
; ˆ­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨.
;*****************************************************************
EMM_FN1:
PUSH BC
PUSH HL
PUSH DE
IN A,(PAGE2)
LD C,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD HL,RAMD_FAT-4000H ; €¤à¥á FAT އ“.
EMM_F1_L1: ; ‚ᥠáâà ­¨æë ᢮¡®¤­ë.
LD (HL),0
INC L
JR NZ,EMM_F1_L1
;*************************
LD DE,TAB_PGS ; â ¡«¨æ  § ­ïâëå á¨á⥬­ëå áâà ­¨æ
EMM_F1_L2:
LD A,(DE)
CP 0FFH
JR Z,EMM_F1_L3
INC DE
LD L,A
LD A,(DE)
LD (HL),A
JR EMM_F1_L2
EMM_F1_L3:
LD L,A
LD (HL),A
EMM_F1_RAMD_INI:
LD HL,RAMD_KEYS-4000H ; ˆ­¨æ¨ «¨§ æ¨ï ª«î祩 RAM-Disks
LD B,RAMD_KEY_NUM
EMM_F1_L5:
LD (HL),0
INC L
DJNZ EMM_F1_L5
LD A,C
OUT (PAGE2),A
POP DE
POP HL
POP BC
RET
;************************************
TAB_PGS:
DB 0,1,2,3,4,5,6,7
DB 08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
DB 40H
DB 50H,51H,52H,53H,54H,55H,56H,57H
DB 58H,59H,5AH,5BH,5CH,5DH,5EH,5FH
DB 0FCH,0FDH,0FEH,0FFH
;*****************************************************************
; <09>®«ãç¨âì ¡«®ª ¯ ¬ï⨠N bytes,
; ‚室: B - ç¨á«® ­¥®¡å®¤¨¬ëå ¡«®ª®¢
; ‚ë室: L,A - Š‹ž— RAM-Disk/ª®¤ ®è¨¡ª¨
; CF - ¯à¨§­ ª ®è¨¡ª¨
;*****************************************************************
EMM_FN2M:
PUSH DE
PUSH BC
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
LD C,B ; á®åà ­¨âì ç¨á«® ­ã¦­ëå ¡«®ª®¢
LD HL,RAMD_FAT-4000H
EMM_F2M_L1: ; –¨ª« ¯à®¢¥àª¨ ­ «¨ç¨ï ­ã¦­ëå ¡«®ª®¢.
DEC L
JR Z,EMM_F2M_NO_RAM
LD A,(HL)
AND A
JR NZ,EMM_F2M_L1
DJNZ EMM_F2M_L1
;**************************
; Œ¥áâ® ¥áâì !
;**************************
LD B,C ; ‚®ááâ ­®¢¨âì ­ã¦­ë© ®¡ê¥¬ ¤¨áª 
LD C,0FFH ; Œ…’Š€ ŠŽ<C5A0>€ RAM-Disk
LD HL,RAMD_FAT-4000H
EMM_F2M_L2: ; ‡ ¯®«­¨âì RAMD_FAT
DEC L
LD A,(HL)
AND A
JR NZ,EMM_F2M_L2
LD (HL),C
LD C,L
DJNZ EMM_F2M_L2
;************************************
; L - 㪠§ â¥«ì 楯®çª¨.
;************************************
EX AF,AF'
OUT (PAGE2),A
LD A,L
AND A
POP BC
POP DE
RET
EMM_F2M_NO_RAM:
LD L,1 ; <20> <20>€ŒŸˆ
EX AF,AF'
OUT (PAGE2),A
LD A,L
SCF
POP BC
POP DE
RET
;*****************************************************************
; <09>®«ãç¨âì ¡«®ª ¯ ¬ï⨠N bytes, ¤«ï RAM-Disk A
; ‚室: B - ç¨á«® ­¥®¡å®¤¨¬ëå ¡«®ª®¢, A - RAM-Disk
; ‚ë室: L,A - Š‹ž— RAM-Disk/ª®¤ ®è¨¡ª¨
; CF - ¯à¨§­ ª ®è¨¡ª¨
;*****************************************************************
EMM_FN2:
PUSH AF
CALL EMM_FN2M
JR C,EMM_FN2_L1
LD B,A
POP AF
CALL BLK_TO_RAMD
RET NC
; LD A,B
; CALL EMM_FN3M
; SCF
LD L,2 ; RAM-Disk § ­ïâ
RET
EMM_FN2_L1:
POP AF ; ­¥â ¯ ¬ïâ¨
LD L,1
SCF
RET
;;*****************************************************************
;; Žá¢®¡®¤¨âì ¡«®ª ¯ ¬ïâ¨
;; ‚室: A - <20>€—€Ž <E28093>Ž—Šˆ
;;*****************************************************************
EMM_FN3M:
AND A
SCF
RET Z
LD L,A
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
LD H,RAMD_FAT/256-40h
LD A,L
EMM_F3M_L1:
LD L,A
LD A,(HL) ; á«¥¤ãî騩 ¡«®ª
AND A
JR Z,EMM_FN3M_ERR
LD (HL),0 ; Žá¢®¡®¤¨âì
CP 0FFH ; …᫨ ­¥ ª®­¥æ
JR NZ,EMM_F3M_L1 ; ¯à®¤®«¦ âì
EX AF,AF'
OUT (PAGE2),A
LD A,0
AND A
RET
EMM_FN3M_ERR:
EX AF,AF'
OUT (PAGE2),A
LD A,2
SCF
RET
;*****************************************************************
; Žá¢®¡®¤¨âì ¡«®ª ¯ ¬ï⨠ª«îç  K
; ‚室: A - Š‹ž— RAM-Disk
;*****************************************************************
EMM_FN3:
CALL GET_RAMD_ST
RET C
SCF
RET Z
LD C,A
IN A,(PAGE2)
LD B,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD (HL),0
LD A,B
OUT (PAGE2),A
LD A,C
JR EMM_FN3M
;*****************************************************************
; <09>®«ãç¨âì áâà ­¨æã N ¡«®ª  K
; ‚室: A - ¡«®ª, B - ­®¬¥à áâà ­¨æë
; ‚ë室: A - áâà ­¨æ , IF CF - A=0 - ­¥â ¡«®ª , A=FF - END
;*****************************************************************
EMM_FN4M:
LD L,A
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
INC B
LD H,RAMD_FAT/256-40H
EMM_F4M_L1:
LD A,(HL)
AND A
JR Z,EMM_F4M_ERR
DEC B
JR Z,EMM_F4M_END
LD L,A
CP 0FFH
JR NZ,EMM_F4M_L1
EMM_F4M_ERR:
LD L,A
EX AF,AF'
OUT (PAGE2),A
LD A,L
SCF
RET
EMM_F4M_END:
EX AF,AF'
OUT (PAGE2),A
LD A,L
AND A
RET
;*****************************************************************
; <09>®«ãç¨âì áâà ­¨æã N ª«îç  K
; ‚室: A - Š‹ž— RAM-Disk, B - ­®¬¥à áâà ­¨æë
; ‚ë室: A - áâà ­¨æ 
;*****************************************************************
EMM_FN4:
CALL GET_RAMD_ST
RET C
SCF
RET Z
JR EMM_FN4M
;*****************************************************************
; <09>®«ãç¨âì á«¥¤ãîéãî áâà ­¨æã ¯® FAT
; ‚室: A - áâà ­¨æ  އ“
; ‚ë室: A - á«¥¤ãîé ï áâà ­¨æ  އ“
;*****************************************************************
EMM_FN5:
LD L,A
AND A
SCF
RET Z
IN A,(PAGE2)
LD H,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD A,H
LD H,RAMD_FAT/256-40H
LD L,(HL)
OUT (PAGE2),A
LD A,L
AND A
SCF
RET Z
AND A
RET
;*****************************************************************
; <09>®«ãç¨âì ᯨ᮪ áâà ­¨æ ¡«®ª  ¢ HL
; ‚室: A - ¡«®ª, HL -  ¤à¥á ¡ãä¥à  - 256 ¡ ©â.
; ‚ë室: HL -  ¤à¥á ¡«®ª , B - ¤«¨­  ¡«®ª  ¢ áâà ­¨æ å އ“
;*****************************************************************
EMM_FN5M:
PUSH DE
PUSH HL
EX DE,HL
LD B,0
LD L,A
EMM_FN5M_L:
LD A,L
LD (DE),A
INC DE
AND A
JR Z,EMM_FN5M_ERR
CP 0FFH
JR Z,EMM_FN5M_END
IN A,(PAGE2)
LD C,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD H,RAMD_FAT/256-40H
LD L,(HL)
LD A,C
OUT (PAGE2),A
INC B
JR NZ,EMM_FN5M_L
EMM_FN5M_ERR:
SCF
POP HL
POP DE
RET
EMM_FN5M_END:
POP HL
POP DE
AND A
RET
;*****************************************************************
; <09>®«ã祭¨¥  ¤à¥á®¢ ¯®à⮢ ¨ ¤ ­­ëå ¤«ï ¢®ááâ ­®¢«¥­¨ï
; ‚室: A - ­®¬¥à ®ª­  ¯à®¥æ¨à®¢ ­¨ï
; ‚ë室: B - ¤ ­­ë¥, C -  ¤à¥á ¯®àâ  ®ª­ 
;*****************************************************************
EMM_FN6:
AND A
LD C,PAGE0
IN B,(C)
RET Z
DEC A
LD C,PAGE1
IN B,(C)
RET Z
DEC A
LD C,PAGE2
IN B,(C)
RET Z
DEC A
LD C,PAGE3
IN B,(C)
RET Z
SCF
RET
FN_RAMD_R_W EQU 9BH
BLK_R_W:
RAMD_R_W:
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; º RD/WR SECTOR HL - BUFER º\
; º DE - ABS sector ¢ 256b ¡«®ª å º\
; º B - ç¨á«® ¤ ­­ëå ¢ 256b ¡«®ª å º\
; º A' - ª®¬ ­¤  ç⥭¨¥/§ ¯¨áì º\
; º A - block RAM º\
; º 0 - ç⥭¨¥, 255 - § ¯¨áì º\
; º ** NOT USED TR-DOS VARS ** º\
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
AND A
SCF
RET C
PUSH HL
PUSH BC
INC D
LD C,PAGE2
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
LD H,82H
LD L,A
RAMD_LOOP_D:
DEC D
JR Z,NOT_FOUR_BLK
LD L,(HL)
LD L,(HL)
LD L,(HL)
LD L,(HL)
JR RAMD_LOOP_D
NOT_FOUR_BLK:
LD A,E
NOT_FOUR_BLK1:
SUB 40H
JR C,NOT_ONE_BLK
LD L,(HL)
JR NOT_FOUR_BLK1
NOT_ONE_BLK:
AND 3FH
; ADD A,40H
LD D,A ; DE - ADRESS in RAM-Disk
LD E,0
LD A,L ; L - ⥪ã騩 ¡ ­ª RAM-Disk
OUT (C),B ; ¢®ááâ ­®¢¨âì áâà ­¨æã
POP BC ; ¤«¨­  ¤ ­­ëå
POP HL ;  ¤à¥á ¡ãä¥à 
BIT 7,H
JR NZ,BLK_PAGE1
BLK_PAGE3:
LD C,PAGE3
IN C,(C)
OUT (PAGE3),A
SET 7,D
SET 6,D
JR BLK_CONT1
BLK_PAGE1:
LD C,PAGE1
IN C,(C)
OUT (PAGE1),A
RES 7,D
SET 6,D
BLK_CONT1:
EX AF,AF'
AND A
JR NZ,NO_EX_RW1
EX DE,HL
NO_EX_RW1:
EX AF,AF'
LD A,16
BLK_LL1:
DUP 16
LDI
EDUP
DEC A
JR NZ,BLK_LL1
EX AF,AF'
JR NZ,NO_EX_RW2
EX DE,HL
NO_EX_RW2:
EX AF,AF'
INC B
DEC B
JP Z,BLK_EXIT_1
BIT 6,D
JP NZ,BLK_CONT1
BIT 7,D
JR Z,BLK_PAGE3_X
IN A,(PAGE1)
LD E,A
LD D,42H
LD A,SYS_PAGE
OUT (PAGE1),A
LD A,(DE)
OUT (PAGE1),A
LD DE,4000H
JP BLK_CONT1
BLK_PAGE3_X:
IN A,(PAGE3)
LD E,A
LD D,0C2H
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(DE)
OUT (PAGE3),A
LD DE,0C000H
BIT 7,H
JP Z,BLK_CONT1
LD E,A
LD A,C
OUT (PAGE3),A
IN A,(PAGE1)
LD C,A
LD A,E
OUT (PAGE1),A
LD DE,4000H
JP BLK_CONT1
BLK_EXIT_1:
LD A,D
RLCA
XOR D
RLCA
JR NC,BLK_EXIT_2
LD A,C
OUT (PAGE1),A
AND A
RET
BLK_EXIT_2:
LD A,C
OUT (PAGE3),A
AND A
RET
DISK_REDIR:
PUSH HL
LD HL,DISK_TYPE-4000h
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
LD A,(OPER_DISK)
AND 3
ADD A,L
LD L,A
LD L,(HL)
EX AF,AF'
OUT (PAGE2),A
LD A,L
POP HL
RET
SET_DISK_TYPE:
PUSH HL
LD HL,DISK_TYPE-4000H
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
LD A,(OPER_DISK)
AND 3
ADD A,L
LD L,A
LD (HL),E
LD L,(HL)
EX AF,AF'
OUT (PAGE2),A
LD A,L
POP HL
RET
RAMD_CALC_PAGE: ; ¢å®¤: DE - ram_disk trk_sec, A - RAM-Disk
; ¢ë室: HL -  ¤à¥á, A - page
CP 16
CCF
RET C ; <20> ’€ŠŽƒŽ RAM-Disk
PUSH AF
LD H,D
LD L,E
ADD HL,HL
ADD HL,HL
LD B,H
LD A,E
OR 0C0H
LD C,A ; C - ç áâì  ¤à¥á , B - áâà ­¨æ 
POP AF
CALL EMM_FN4 ; <20>Ž“—ˆœ <E28098><EFBFBD>ˆ
LD L,0
LD H,C
; RET C
; LD B,A
; LD A,B
; CP 0FFH
; CCF
RET
;*****************************************************
;
; HL - ¡ãä¥à
;
;*****************************************************
Version EQU 020DH ; Version BIOS
ID_SPRINTER:
DB 'Sprinter BIOS: ver 2.13',0,"Sprinter",0,0
L_ID EQU $-ID_SPRINTER
;*****************************************************
FN_VERSION:
PUSH HL
EX DE,HL
LD HL,ID_SPRINTER
LD BC,L_ID
LDIR
POP HL
LD DE,Version
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
LD BC,(CONFIG_BYTE-4000h) ; Version PLD
EX AF,AF'
OUT (PAGE2),A
LD A,2 ; —¨á«® ¯®«¥©
AND A
RET
;*****************************************************
EMM_FN7:
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
LD HL,08000H
LD DE,ID_SPRINTER
LD B,L_ID
ID_LOOP:
LD A,(DE)
CP (HL)
JR NZ,INIT_SYS_ALL
INC HL
INC DE
DJNZ ID_LOOP
EX AF,AF'
OUT (PAGE2),A
RET
MSDOS_COLD_VARS:
DI
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
INIT_SYS_ALL:
LD DE,08000H
LD HL,ID_SPRINTER
LD BC,L_ID
LDIR
LD HL,DISK_TYPE-4000h
LD (HL),0
INC HL
LD (HL),1
INC HL
LD (HL),40H ; HDD
INC HL
LD (HL),3
INC HL
LD (HL),0 ; PAGE0
INC HL
LD (HL),5 ; PAGE1
INC HL
LD (HL),2 ; PAGE2
INC HL
LD (HL),0 ; PAGE3
LD A,9
LD (MSD_SECS-4000h),A
LD A,0
LD (DS_1440-4000h),A
LD HL,RAMD_KEYS-4000h
LD DE,RAMD_KEYS+1-4000h
LD BC,RAMD_KEY_NUM-1
LD (HL),0
LDIR
LD DE,ZG_ADDRESS
LD (WIN_ZG-4000h),DE
LD HL,L_SCORPION
LD (CONFIG_ALL-4000h),HL
LD DE,CNF_0
LD (CONFIG_DE-4000h),DE
LD HL,TASK_DATA-4000h ; 㡨âì ¢á¥ § ¤ ç¨ ;SYS_PAGE.CURRENT_TASK
LD DE,TASK_DATA+1-4000h
LD BC,0FFH
LD (HL),0
LDIR
EX AF,AF'
OUT (PAGE2),A
CALL EMM_FN1
RET