Estex-DSS/DSS/DRV-MAIN.ASM
2024-02-02 01:18:47 +10:00

355 lines
9.4 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.

;[BEGIN]
;//MODULE: DRV-MAIN AUTHOR: Denis Parinov
;//CREATE: 2003-03-12
;---------------------------------------------------------------
;Rev Date Name Description
;---------------------------------------------------------------
;R00 2003-03-19 DNS Initial version
;---------------------------------------------------------------
; ORG #0000
;PAGEDRV EQU 0
;===============;
;!FIXIT ¢ ¯à®æ¥¤ãॠª®â®à ï ¡ã¤¥â ®â¢¥ç âì §  ¯¥à¥å®¤ ¨§ í⮩ áâà ­¨æë ®¡à â­® ¢ MAIN ¤«ï ¢ë§®¢  ä㭪権
; „‘‘ ¨, ¢®§¬®¦­®, ¯®¢â®à­®¬ã § å®¤ã ¢ íâã áâà ­¨æã ç¥à¥§ RST #18 ¨§ ¤à㣨å áâà ­¨æ (ª®â®àëå ¯®ª  ­¥â)
; ᤥ« âì ­¥çâ® ¯®¤®¡­®¥ á ¯à®£à ¬¬­ë¬ á⥪®¬ áâà ­¨æ. <20>â  ¯à®æ¥¤ãà  ¨å á®åà ­ï¥â, ¯à¨¬¥à­® â ª ï ¦¥
; ¤®«¦­  ¢®ááâ ­ ¢«¨¢ âì.
; PUSH HL
;.SP+1: LD HL,DRV_PAGE.RSTx18_RET_PAGES
; LD (HL),A
; DEC L ; <20>¥ HL,   L - ç⮡ § ª®«ì楢 âì ®¡« áâì
; LD (.SP),HL
; POP HL
;===============;
;!TODO
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[NOT USED]> ;
A0000: JP RST_00 ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;
RST_00:
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
;
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[BIOS API]> ;
BLOCK 8-$,#C7 ; #C7 - "RST 0" opcode
A0008: PUSH AF ;
LD A,SYS_PORT.PAGE8;
OUT (SYS_PORT.ON),A ;
POP AF ;
RET ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;!FIXIT
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[DSS API]> ;
BLOCK #10-$,#C7 ; #C7 - "RST 0" opcode
A0010: ;JP DRV_PAGE.RST_10 ;
DI : HALT ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[DRIVE API]> ;
BLOCK #18-$,#C7 ; #C7 - "RST 0" opcode
;A0018 JP INTDISK ;
A0018: ;PUSH AF ;
;PUSH BC ;
SCF
RET
DRV_PAGE.MAIN_PAGE_NUMBER+2: ;
LD BC,0*256 + SLOT0 ; !FIXIT á ­¥ ¤®«¦­ë ¢áâ ¢«ïâìáï ­®¬¥à  ¢ë¤¥«¥­­ëå áâà ­¨æ?
;JP PORTAL.outDRV ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;!TODO
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[NOT USED]> ;
BLOCK #20-$,#C7 ; #C7 - "RST 0" opcode
A0020: JP DRV_PAGE.RST_20 ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;
DRV_PAGE.RST_20:
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
;
;!TODO
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[NOT USED]> ;
BLOCK #28-$,#C7 ; #C7 - "RST 0" opcode
A0028: JP DRV_PAGE.RST_28 ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;
DRV_PAGE.RST_28:
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
;
;!TODO
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[NOT USED]> ;
BLOCK #30-$,#C7 ;
A0030: JP RST_30 ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;
RST_30:
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
;
;!FIXIT
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[MAIN INT]> ;
BLOCK #38-$,#C7 ;
A0038: ;
; JP RST_38 ;
; RST_38: ;
; INT_: PUSH AF ;
; EX AF,AF' ;
; PUSH AF ;
; PUSH BC ;
; PUSH DE ;
; PUSH HL ;
; EXX ;
; PUSH BC ;
; PUSH DE ;
; PUSH HL ;
; PUSH IX ;
; PUSH IY ;
; CALL KEYSCAN ;
; LD C,#80 ;
; RST ToDSS.Mouse ;
; POP IY ;
; POP IX ;
; POP HL ;
; POP DE ;
; POP BC ;
; EXX ;
; POP HL ;
; POP DE ;
; POP BC ;
; POP AF ;
; EX AF,AF' ;
; POP AF ;
EI ;
RETI ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;
DRV_PAGE.KEYSCAN: RET ;!FIXIT
;
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[ NMI ]> ;
DRV_PAGE.NMI: RETN ;
BLOCK #66-$,#C7;
A0066: JP DRV_PAGE.NMI ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;-------------------------------;
;ADRST10 EQU #00 ; ;!!!!!
;-------------------------------;
;!FIXIT
; DRV_PAGE.RST_10:
; PUSH HL
; LD L,C
; LD H,ADRST10/256
; LD C,(HL)
; INC H
; LD H,(HL)
; LD L,C
; EX (SP),HL
; RET
;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; <[DRIVE PAGE SWITCH]> ;
BLOCK PORTAL.RSTx18_SWITCH_ADDRESS-$-(PORTAL.out_DRV.switch - PORTAL.out_DRV),#C7
PORTAL.out_DRV: PUSH BC ;
.RETBANK+2: LD BC,SLOT0 + 0*256; ;!!!!! ReScnDRV ¨á¯®«ì§ã¥â íâ® §­ ç¥­¨¥
.switch: OUT (C),B ;
ASSERT $!=84,'-> Portal error!';
;Entry point from DSS main page
LD (.RETBANK),A ;
POP BC ;
POP AF ;
.ADCALL+1: CALL DISPATCH ; ¯ âç¨âáï ­  INTDISK
JP PORTAL.out_DRV ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
;!FIXIT çñâ ­¥ â® âãâ
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; LD B,#00; ;
; OUT (C),A ;
;--- ;
; POP BC ;
; RET ;
;PORTAL.outDRV: ;
; RET ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
DRV_PAGE.LDRIVE: DB #00
DISPATCH:
LD HL,INTDISK
LD (PORTAL.out_DRV.ADCALL),HL
INITDVC_RET_DRIVE:
CALL INITDVC
LD A,(DRV_PAGE.LDRIVE)
AND A
RET
INCLUDE 'dss/media_drivers/shared-drv.asm'
INCLUDE 'dss/media_drivers/ide-drv.asm'
INCLUDE 'dss/media_drivers/fdd-drv.asm'
INCLUDE 'dss/media_drivers/ram_disk-drv.asm'
/////////////////////////// [ DRIVE TABLES ] \\\\\\\\\\\\\\\\\\\\\\\\\\\;
;
;------------------------[shared-drv.asm table]------------------------;
DEVICE EQU $
.TBL_Entry EQU 3
.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry
.End EQU DEVICE.Size + 1 ; ¤«ï á⮯-¡ ©â  #FF
;----------------------------------------------------------------------;
;
;
;-------------------------[ IDE-DRV.ASM table]-------------------------;
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
;+01 LONG SECTOR OFFSET
;+05 LONG SIZE IN SECTORS
;+09 BYTE PARTITION RECORD NUMBER (in drive MBR)
;+09 FREE
;+15
LOGDRV EQU DEVICE + DEVICE.End
.TBL_Entry EQU 16
.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry
;!TODO ᤥ« âì áâàãªâãன
.PHISICAL_DRV_NUMBER EQU 0
.SECTOR_OFFSET EQU 1
.SIZE_IN_SECTORS EQU 5
.PARTITION_RECORD_NUM EQU 9
; ‚•Ž„: L - «®£¨ç¥áª¨© ­®¬¥à ¢ â ¡«¨æ¥
; ‚›•Ž„: IY - ­ ç «® § ¯¨á¨
; <20>Ž<EFBFBD>ˆ: HL, IY. HL<-->DE
; MACRO LOGDRV_ENTRY_FIND tbl_addr
; LD H,0
; ADD HL,HL
; ADD HL,HL
; ADD HL,HL
; ADD HL,HL
; ;LD B,H
; ;LD C,L
; EX DE,HL
; LD IY,tbl_addr
; ADD IY,DE
; ENDM
;----------------------------------------------------------------------;
;
;
;-----------------------[ram_disk-drv.asm table]-----------------------;
; <E28099>ˆ€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆŠ€ ˆ …ƒŽ RAM-DISK ID
; Log Number: DB RAM_Drive_Log_Number, RAM_Drive_ID ;(BIOS 0-15), (Block ID for BIOS)
RAMDTBL EQU LOGDRV + LOGDRV.Size
.TBL_Entry EQU 2
.Size EQU .TBL_Entry * MAX_RAMDRIVES
; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
; DB #FF
; EDUP
; .Size EQU $-RAMDTBL
;----------------------------------------------------------------------;
;
////////////////////////////////////////////////////////////////////////;
///////////////////////// [ DRIVE TABLES COPY] \\\\\\\\\\\\\\\\\\\\\\\\\;
MODULE OLD_TABLES
;
;------------------------[shared-drv.asm table]------------------------;
DEVICE EQU @RAMDTBL + @RAMDTBL.Size
.TBL_Entry EQU @DEVICE.TBL_Entry
.Size: EQU @DEVICE.Size
.End EQU @DEVICE.End
;----------------------------------------------------------------------;
;
;
;-------------------------[ IDE-DRV.ASM table]-------------------------;
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
;+01 LONG SECTOR OFFSET
;+05 LONG SIZE IN SECTORS
;+09 FREE
;+15
LOGDRV EQU DEVICE + DEVICE.End
.TBL_Entry EQU @LOGDRV.TBL_Entry
.Size EQU @LOGDRV.Size
;----------------------------------------------------------------------;
;
;
;-----------------------[ram_disk-drv.asm table]-----------------------;
; <E28099>ˆ€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆŠ€ ˆ …ƒŽ RAM-DISK ID
; Log Number: DB RAM_Drive_Log_Number, RAM_Drive_ID ;(BIOS 0-15), (Block ID for BIOS)
RAMDTBL EQU LOGDRV + LOGDRV.Size
.TBL_Entry EQU @RAMDTBL.TBL_Entry
.Size EQU @RAMDTBL.Size
; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
; DB #FF
; EDUP
; .Size EQU $-RAMDTBL
;----------------------------------------------------------------------;
;
ENDMODULE
////////////////////////////////////////////////////////////////////////;
DISPLAY "DEVICE start: ", /H, DEVICE
DISPLAY "Old DEVICE start: ", /H, OLD_TABLES.DEVICE
DISPLAY "LOGDRV start: ", /H, LOGDRV
DISPLAY "Old LOGDRV start: ", /H, OLD_TABLES.LOGDRV
DISPLAY "RAMDTBL start: ", /H, RAMDTBL
DISPLAY "Old RAMDTBL start: ", /H, OLD_TABLES.RAMDTBL
;
;DRV_TEMP_BUFFER:
;---------[256 bytes stack for return pages of RST #18 callers]--------;
; #3F00 - #3FFF
DRV_PAGE.RSTx18_RET_PAGES EQU #3FFF
;----------------------------------------------------------------------;
; ASSERT ((#4000-DRV_TEMP_BUFFER-256) > (DEVICE.Size + LOGDRV.Size + RAMDTBL.Size)), "No space for DRV_TEMP_BUFFER in DRV-MAIN page"
; ENDMODULE
; OUTEND
;[END]