Estex-DSS/DSS/DRV-MAIN.ASM
Tolik b38d6ccd48 removed #55aa for GenIOCTL
new subfunction GetMoreParams for GenIOCTL
2026-03-27 00:16:01 +10:00

348 lines
9.9 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.

MODULE DRIVES_DRIVER
MODULE_START EQU $
; 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,BIOS.Error.InvalidSubFunction
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,BIOS.Error.InvalidSubFunction
SCF
RET
;
;!TODO
////////////////////////////////////////////////////////////////////////
; <[NOT USED]>
BLOCK #28-$,#C7 ; #C7 - "RST 0" opcode
A0028: JP DRV_PAGE.RST_28
////////////////////////////////////////////////////////////////////////
;
DRV_PAGE.RST_28:
LD A,BIOS.Error.InvalidSubFunction
SCF
RET
;
////////////////////////////////////////////////////////////////////////
BLOCK #30-$,#C7 ; #C7 - "RST 0" opcode
RST_30: JP MOUSE_DRV.API
.RET: OUT (SLOT0),A
JP MOUSE_HANDLER
////////////////////////////////////////////////////////////////////////
;!FIXIT
////////////////////////////////////////////////////////////////////////
; <[MAIN INT]> ;
BLOCK #38-$,#C7 ;shortblock-ok
/*
;!TEST SIO INT
; reg 0 - error reset
IF KEYBOARD_INT_ENABLED && MOUSE_INT_ENABLED == 0
PUSH AF
; reg 0 - error reset
LD A,%0011'0000
OUT (Z84.SIO.Ch_A.Ctrl),A
; reg 0 - return from int
LD A,%0011'1000
OUT (Z84.SIO.Ch_A.Ctrl),A
POP AF
ELSEIF MOUSE_INT_ENABLED && KEYBOARD_INT_ENABLED == 0
PUSH AF
; reg 0 - error reset
LD A,%0011'0000
OUT (Z84.SIO.Ch_B.Ctrl),A
; reg 0 - return from int
LD A,%0011'1000
OUT (Z84.SIO.Ch_B.Ctrl),A
POP AF
ELSEIF MOUSE_INT_ENABLED && KEYBOARD_INT_ENABLED
PUSH AF
; reg 0 - error reset
LD A,%0011'0000
OUT (Z84.SIO.Ch_A.Ctrl),A
OUT (Z84.SIO.Ch_B.Ctrl),A
; reg 0 - return from int
LD A,%0011'1000
OUT (Z84.SIO.Ch_A.Ctrl),A
OUT (Z84.SIO.Ch_B.Ctrl),A
POP AF
ENDIF
EI ;
RETI ;
*/
RST_38_DRV: JP .Portal
BLOCK RST_38_IM1.Portal - $,0
.Portal: PUSH AF
LD A,(DRV_PAGE.MAIN_PAGE_NUMBER)
OUT (SLOT0),A
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.switch - PORTAL.out),#C7
PORTAL.out: 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
JR NC,PORTAL.out
OR DSS_Error.DRV_MASK
SCF
JP PORTAL.out
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
MOUSE_HANDLER: POP AF
CALL MOUSE_DRV.API
PUSH AF
.CorePage EQU $$$ + 1
LD A,#FF
JP RST_30.RET
////////////////////////////////////////////////////////////////////////
DRV_PAGE.LDRIVE: DB #00
DISPATCH:
LD HL,INTDISK
LD (PORTAL.out.ADCALL),HL
INITDVC_RET_DRIVE:
CALL INITDVC
LD A,(DRV_PAGE.LDRIVE)
AND A
RET
INCLUDE 'dss/Drivers/media/shared.asm'
INCLUDE 'dss/Drivers/media/ata_atapi-drv.asm'
INCLUDE 'dss/Drivers/media/fdd-drv.asm'
INCLUDE 'dss/Drivers/media/ram_disk-drv.asm'
INCLUDE "dss/Drivers/input/MOUSE.ASM"
/////////////////////////// [ DRIVE TABLES ] \\\\\\\\\\\\\\\\\\\\\\\\\\\;
;
;--------------------------[shared.asm table]--------------------------;
DEVICE EQU $
.TBL_Entry EQU 3
.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry
.End EQU DEVICE.Size + 1 ; ¤«ï á⮯-¡ ©â  #FF
;----------------------------------------------------------------------;
;
;
;--------------------------[shared.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)
;+10 WORD Sector Size
;+12 BYTE Removable Media Byte flags
;+13_15 FREE
;
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
.SECTOR_SIZE EQU 10 ; word
.MediaParameters EQU 12 ; bit0=1 removable, bit1=1 drive changed, bit7..2 reserved
.Reserved_1 EQU 13
.Reserved_2 EQU 14
.Reserved_3 EQU 15
;----------------------------------------------------------------------;
;
;
;-----------------------[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 + DRIVES_DRIVER.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.asm table]--------------------------;
DEVICE EQU @DRIVES_DRIVER.RAMDTBL + @DRIVES_DRIVER.RAMDTBL.Size
.TBL_Entry EQU @DRIVES_DRIVER.DEVICE.TBL_Entry
.Size: EQU @DRIVES_DRIVER.DEVICE.Size
.End EQU @DRIVES_DRIVER.DEVICE.End
;----------------------------------------------------------------------;
;
;
;--------------------------[shared.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 @DRIVES_DRIVER.LOGDRV.TBL_Entry
.Size EQU @DRIVES_DRIVER.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 + DRIVES_DRIVER.LOGDRV.Size
.TBL_Entry EQU @DRIVES_DRIVER.RAMDTBL.TBL_Entry
.Size EQU @DRIVES_DRIVER.RAMDTBL.Size
; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
; DB #FF
; EDUP
; .Size EQU $-RAMDTBL
;----------------------------------------------------------------------;
ENDMODULE ;OLD_TABLES
////////////////////////////////////////////////////////////////////////;
;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:
MODULE_START.Size EQU (OLD_TABLES.RAMDTBL + OLD_TABLES.RAMDTBL.Size) - MODULE_START
DISPLAY "DRV MODULE SIZE: ",/A,MODULE_START.Size
;!TODO
;---------[256 bytes stack for return pages of RST #18 callers]--------;
; #3F00 - #4000
DRV_PAGE.RSTx18_RET_PAGES EQU #4000
;----------------------------------------------------------------------;
; ASSERT ((#4000-DRV_TEMP_BUFFER-256) > (DEVICE.Size +DRIVES_DRIVER.LOGDRV.Size + RAMDTBL.Size)), "No space for DRV_TEMP_BUFFER in DRV-MAIN page"
; ENDMODULE
; OUTEND
;[END]
ENDMODULE ;DRIVES_DRIVER