mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
Убран баг в ATTRIB для GET на разделе FAT с кластером 64 кб. Исправлен улёт стека в ПЗУ в процедуре запуска EXE. Исправлен баг со скроллом в ECHOKEY.
737 lines
22 KiB
NASM
737 lines
22 KiB
NASM
|
||
;[BEGIN]
|
||
;//MODULE: DOS-MAIN AUTHOR: Denis Parinov
|
||
;//CREATE: A LONG TIME AGO :)
|
||
;---------------------------------------------------------------
|
||
;Rev Date Name Description
|
||
;---------------------------------------------------------------
|
||
;[ ] 㢥«¨ç¨âì ¤«¨ã PATH ¨ áâப¨ BAT
|
||
;[ ] ¯ãâì ⥪ã饣® ª â «®£ ¢ DIR ¢ë¢®¤¨âáï á £«îª®¬ ¥á«¨ ® ¤«¨¥¥ 256 ¡ ©â®¢
|
||
;[ ] ¯ãâì ¢ ¯à¨£« 襨¨ ª®á®«¨ ¢ë¢®¤¨âáï á £«îª®¬ ¥á«¨ ¯ãâì ¤«¨¥¥ 256 ¡ ©â®¢
|
||
;[ ] ;!FIXIT ª ª®©-â® ¡ £ ¯à¨ ª®â®à®¬ ¥á«¨ ¥â ¤¨áª ¨ ¥£® ¯®«¥§âì, â® ¢áñ «®¬ ¥âáï
|
||
;R12 24-07-2023 BAO Check minimum BIOS version on boot
|
||
;R11 17-04-2023 BAO OPTIMIZED BUFFERS, FREED UP 768 BYTES FOR CODE
|
||
;R10 14-04-2023 BAO €¢ à¨©ë© § ¢¨á® á ¢ë¢®¤®¬ á®®¡é¥¨ï ¯à¨ áâ à⥠á¨á⥬ë, ¥á«¨ ¥â ᢮¡®¤®© ¯ ¬ïâ¨
|
||
;R09 08-04-2023 BAO ‘®ªà 饨¥ à §¬¥à â ¡«¨æë API ¤® 96 äãªæ¨© (0 - #5F). (Ž¯æ¨® «ì® ¯à¨ ª®¬¯¨«ï樨)
|
||
;R08 15-04-2003 DNS RENAMED FN. OPEN AND CLOSE
|
||
;R07 31-03-2003 DNS NEW DEPLOYING ROUTINE
|
||
;R06 31-03-2003 DNS RELAYOUTING MEMORY
|
||
;R05 27-03-2003 DNS CHANGE DRV. INIT. METHOD
|
||
;R04 27-03-2003 DNS DRIVERS MOVE TO SPECIAL PAGE
|
||
;R03 14-03-2003 DNS CODE OPTIMIZATION
|
||
;R02 19-11-2002 DNS ADD ENVIRONMENT INITIALIZATION
|
||
;R01 14-11-2002 DNS CUT AND MOVE BPB-STRUCT
|
||
;---------------------------------------------------------------
|
||
; OUTPUT './Build/system.dos'
|
||
|
||
; MODULE MAIN
|
||
//SPRINTER EQU 2000
|
||
|
||
includelua 'Shared_includes/lua/Functions.lua'
|
||
include 'shared_includes/structures/FileSystem.inc'
|
||
include 'shared_includes/constants/sp2000.inc'
|
||
INCLUDE 'defines.inc'
|
||
include 'Structures.inc'
|
||
include 'shared_includes/constants/standart_colors.inc'
|
||
include 'shared_includes/constants/bios_equ.inc'
|
||
include 'shared_includes/constants/dss_equ.inc'
|
||
include 'shared_includes/macroses/accelerator.z80'
|
||
include 'shared_includes/macroses/macros.z80'
|
||
INCLUDE 'VERSION.INC'
|
||
INCLUDE 'DSS_MACROSES.Z80'
|
||
|
||
;PAGEDRV EQU #00
|
||
|
||
; DIRPAGE EQU 0
|
||
; FATPAGE EQU 1
|
||
; TXTPAGE EQU 2
|
||
; ENVPAGE EQU 2
|
||
; DRVPAGE EQU 3
|
||
; ENVPAGE EQU 3
|
||
; DRVPAGE EQU 4
|
||
|
||
; TXTADDR EQU #C000
|
||
; ENVADDR EQU #E400
|
||
|
||
; DIR EQU #C000
|
||
; FAT EQU #C000
|
||
|
||
|
||
;
|
||
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
|
||
ORG 0
|
||
;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
; <[CLOSE TASK]> ;
|
||
RST_0x00: JP RETFAR ; ;EXECUTE.ASM R12
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
;
|
||
|
||
;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
; <[BIOS API]> ;
|
||
_mInfoBLOCK 8-$,#FF ;
|
||
RST_0x08: PUSH AF ;
|
||
LD A,SYS_PORT.BIOS ;
|
||
OUT (SYS_PORT.ON),A ;
|
||
POP AF ;
|
||
RET ;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
;
|
||
|
||
;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
; <[DSS API]> ;
|
||
_mInfoBLOCK #10-$,#FF ;
|
||
RST_0x10: JP RST_10 ;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
;
|
||
|
||
;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
; <[DRIVE API]> ;
|
||
_mInfoBLOCK #18-$,#FF ;
|
||
;A0018 JP INTDISK ;
|
||
RST_0x18: PUSH AF ;
|
||
PUSH BC ;
|
||
DRV_PG_NUMBER+2: ;
|
||
LD BC,0*256+SLOT0 ;
|
||
JP PORTAL.out_MAIN ;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
;
|
||
|
||
;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
; <[NOT USED]> ;
|
||
_mInfoBLOCK #20-$,#FF ;
|
||
RST_0x20: JP RST_20 ;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
;
|
||
|
||
;
|
||
RST_20:
|
||
RST_28:
|
||
NOPS: LD A,DSS_Error.sys.INVALID_FUNCTION
|
||
SCF
|
||
RET
|
||
;
|
||
|
||
;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
; <[NOT USED]> ;
|
||
_mInfoBLOCK #28-$,#FF ;
|
||
RST_0x28: JP RST_28 ;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
;
|
||
|
||
;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
; <[MOUSE API]> ;
|
||
_mInfoBLOCK #30-$,#FF ;
|
||
RST_0x30: PUSH AF
|
||
.drv_page+1: LD A,#FF
|
||
OUT (SLOT0),A
|
||
POP AF
|
||
RET
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
;
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; <[MAIN INT]>
|
||
_mInfoBLOCK #38-$,#FF
|
||
;¤«ï ⮣®, ç⮡ á®äâë ¬®£«¨ ¬¥ïâì ®¡à ¡®â稪 ᢮©.
|
||
RST_38_IM1: JP .Handler
|
||
.Handler: CALL INTx38_Handler
|
||
EI
|
||
RETI
|
||
;
|
||
.Portal: PUSH AF
|
||
LD A,(RST_0x30.drv_page)
|
||
OUT (SLOT0),A
|
||
;POP AF
|
||
PUSH HL
|
||
LD HL,(RST_38_IM1+1)
|
||
XOR A
|
||
CP H
|
||
JR NZ,.error
|
||
LD A,low .Handler
|
||
CP L
|
||
JR NZ,.error
|
||
POP HL
|
||
POP AF
|
||
CALL INTx38_Handler
|
||
JR .Portal
|
||
;
|
||
.error: POP HL
|
||
POP AF
|
||
JR .Portal
|
||
;
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
;
|
||
;NMI: RETN
|
||
;
|
||
|
||
;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
; <[ NMI ]> ;
|
||
_mInfoBLOCK #66-$,#FF ;
|
||
NMI_0x66: RETN ;JP NMI ;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
;
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
;
|
||
RST_10: PUSH HL
|
||
LD L,C
|
||
IF SHORT_RSTx10_TABLE
|
||
;[ ] R09
|
||
LD H,A
|
||
LD A,+(DSS_API_TABLE.low_short)
|
||
SUB C
|
||
JR C,.error
|
||
LD A,H
|
||
;[ ] R09
|
||
ENDIF
|
||
|
||
LD H,high DSS_API_TABLE
|
||
LD C,(HL)
|
||
INC H
|
||
LD H,(HL)
|
||
LD L,C
|
||
EX (SP),HL
|
||
RET
|
||
|
||
IF SHORT_RSTx10_TABLE
|
||
;[ ] R09
|
||
.error: POP HL
|
||
JR NOPS
|
||
;[ ] R09
|
||
ENDIF
|
||
;
|
||
|
||
;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
; <[DRIVE PAGE SWITCH]> ;
|
||
_mInfoBLOCK #80-$,0 ;
|
||
;ENTER: ;
|
||
PORTAL.out_MAIN: ;
|
||
IN A,(C) ;
|
||
OUT (C),B ;
|
||
ASSERT $!=84,'-> Portal error!';
|
||
POP BC ;
|
||
RET ;
|
||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||
;
|
||
|
||
|
||
;R01
|
||
; Area for boot sector BootSector.
|
||
;BootSector _sBOOT_SECTOR_PARAMS ,{ "DSS_","0"+VERS,".",MODF/10+"0",MODF-(MODF/10)*10+"0" }
|
||
; end boot sector
|
||
;R01
|
||
|
||
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
|
||
;
|
||
|
||
;
|
||
CLEAR_BUFFER_AND_INIT_PROC:
|
||
;------[CLEAR BUFFERS]------;
|
||
;R07 ;R11
|
||
XOR A
|
||
LD HL,CLEAR_ZONE.start
|
||
LD DE,CLEAR_ZONE.start+1
|
||
LD BC,CLEAR_ZONE.size-1
|
||
LD (HL),A
|
||
LDIR
|
||
LD HL,':'*256 + 'X'
|
||
LD (CORE_BUFFERS.CurrentPath),HL
|
||
LD A,'\' ;
|
||
LD (CORE_BUFFERS.CurrentDirectory),A
|
||
LD (CORE_BUFFERS.WorkDirectory),A
|
||
;
|
||
LD A,#FF
|
||
LD (CORE_BUFFERS.FS_Buffer.DRIVE),A
|
||
;
|
||
;R07 ;R11
|
||
;R11
|
||
LD HL,CORE_BUFFERS.FM_BUF
|
||
LD (HL),'.'
|
||
;R11
|
||
;---------------------------;
|
||
;R02
|
||
;LD B,#FF ;INIT ENVIRONMENT
|
||
CALL INITENV
|
||
; IFN CLASSIC_CURSOR
|
||
CALL SETUP_CURSORS
|
||
; ENDIF
|
||
;R02
|
||
JP VERSION
|
||
|
||
|
||
|
||
INTx38_Handler: 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,Dss.Mouse.GetPackets
|
||
RST ToDSS.Mouse
|
||
;CALL M_INT
|
||
; IFN CLASSIC_CURSOR
|
||
CALL cursor_interrupt; ¢¥ªâ®à ®¡á«ã¦. ªãàá®à ;!!!!! VASIL
|
||
; ENDIF
|
||
POP IY
|
||
POP IX
|
||
POP HL
|
||
POP DE
|
||
POP BC
|
||
EXX
|
||
POP HL
|
||
POP DE
|
||
POP BC
|
||
POP AF
|
||
EX AF,AF'
|
||
POP AF
|
||
RET
|
||
;R03
|
||
;R07Allocate memory
|
||
; LD BC,#03C2
|
||
; RST ToBIOS
|
||
; LD HL,BANKTBL
|
||
; LD C,A
|
||
; LD B,#FF
|
||
;VERINIT INC B
|
||
; PUSH BC
|
||
; PUSH HL
|
||
; LD A,C
|
||
; LD C,#C4
|
||
; RST ToBIOS
|
||
; POP HL
|
||
; POP BC
|
||
; LD (HL),A
|
||
; INC HL
|
||
; JR NC,VERINIT
|
||
;R07;R03
|
||
;R07 JP INIT2 ;R03
|
||
; DS $/256+1*256-$,0 c:\bin\menu
|
||
|
||
;----------------------------------------------------------------------;
|
||
;MEMTAB: BLOCK 256,0
|
||
;----------------------------------------------------------------------;
|
||
|
||
_mInfoALIGN 256,0
|
||
;------------------------------------------------------------------------------------------------------------------------;
|
||
GO_ZERO EQU #0000
|
||
;FUNCTION ADDRESS ARRAY
|
||
DSS_API_TABLE: ;DS 512 ;,0
|
||
;...............................................[LOW ADDRESS ]:
|
||
; 0 1 2 3 4 5 6 7 8 9 DEC HEX
|
||
DB low F_START, low CHDISK_FN, low CURDISK_FN,low DISKINF, low NOPS, low NOPS, low NOPS, low NOPS, low SCANDRV, low BOOTDSK ; 0 00..09
|
||
DB low CREATE, low CREATE.NEW, low NOPS, low NOPS, low DEL_FN, low NOPS, low RENAME, low OPEN_FN, low CLOSE_FN, low READ ; 1 0A..13
|
||
DB low WRITE, low MOVE_FP, low ATTRIB, low GET_D_T, low PUT_D_T, low F_FIRST_FN,low F_NEXT, low MKDIR.B, low RMDIR, low CHDIR_FN ; 2 14..1D
|
||
DB low CURRDIR_FN,low NOPS, low NOPS, low SYSTIME, low SETTIME, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 3 1E..27
|
||
DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low WAITKEY, low SCANKEY ; 4 28..31
|
||
DB low ECHOKEY, low CTRLKEY, low NOPS, low K_CLEAR, low K_SETUP, low TESTKEY, low SETWIN, low SETWIN1, low SETWIN2, low SETWIN3 ; 5 32..3B
|
||
DB low FREEMEM, low GETMEM, low RETMEM, low SETMEM, low EXEC, low LEAVE, low GET_ERR, low GSWITCH, low DOSNAME, low EX_PATH ; 6 3C..45
|
||
DB low ENVIRON, low APPINFO, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 7 46..4F
|
||
DB low SETVMOD, low GETVMOD, low LOCATE, low CURSOR, low SELPAGE, low SCROLL, low CLEAR, low RDCHAR, low WRCHAR, low WINCOPY ; 8 50..59
|
||
DB low WINREST, low PUTCHAR, low PCHARS, low LIB_SUB, low NOPS, low PRINT ; 9 5A..5F
|
||
|
||
;[ ] R09
|
||
.low_short EQU $ - DSS_API_TABLE
|
||
IFN SHORT_RSTx10_TABLE
|
||
;
|
||
DB low NOPS, low NOPS, low NOPS, low NOPS ; 9 60..63
|
||
DB low NOPS, low NOPS, low NOPS, low NOPS, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 10 64..6D
|
||
DUP 13
|
||
DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 110-239 6E-EF
|
||
EDUP
|
||
DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 24 F0..F9
|
||
DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; END ; 25 FA..FF
|
||
;
|
||
ELSE ;!TODO free space
|
||
|
||
_mInfoBLOCK DSS_API_TABLE+#100 - $,0
|
||
;[ ] R09
|
||
ENDIF
|
||
;...............................................[HIGH ADDRESS]:
|
||
DB high F_START, high CHDISK_FN, high CURDISK_FN,high DISKINF,high NOPS, high NOPS, high NOPS, high NOPS, high SCANDRV, high BOOTDSK
|
||
DB high CREATE, high CREATE.NEW,high NOPS, high NOPS, high DEL_FN, high NOPS, high RENAME, high OPEN_FN,high CLOSE_FN,high READ
|
||
DB high WRITE, high MOVE_FP, high ATTRIB, high GET_D_T,high PUT_D_T,high F_FIRST_FN,high F_NEXT, high MKDIR.B,high RMDIR, high CHDIR_FN
|
||
DB high CURRDIR_FN,high NOPS, high NOPS, high SYSTIME,high SETTIME,high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
|
||
DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high WAITKEY, high SCANKEY
|
||
DB high ECHOKEY, high CTRLKEY, high NOPS, high K_CLEAR,high K_SETUP,high TESTKEY, high SETWIN, high SETWIN1,high SETWIN2, high SETWIN3
|
||
DB high FREEMEM, high GETMEM, high RETMEM, high SETMEM, high EXEC, high LEAVE, high GET_ERR,high GSWITCH,high DOSNAME, high EX_PATH
|
||
DB high ENVIRON, high APPINFO, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
|
||
DB high SETVMOD, high GETVMOD, high LOCATE, high CURSOR, high SELPAGE,high SCROLL, high CLEAR, high RDCHAR, high WRCHAR, high WINCOPY
|
||
DB high WINREST, high PUTCHAR, high PCHARS, high LIB_SUB,high NOPS, high PRINT
|
||
|
||
;[ ] R09
|
||
.high_short EQU $ - DSS_API_TABLE - .low_short
|
||
IFN SHORT_RSTx10_TABLE
|
||
;
|
||
DB high NOPS, high NOPS, high NOPS, high NOPS
|
||
DB high NOPS, high NOPS, high NOPS, high NOPS, high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO
|
||
DUP 13
|
||
DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO
|
||
EDUP
|
||
DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
|
||
DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS ; END
|
||
;
|
||
ELSE
|
||
;!TODO free space
|
||
;_mInfoBLOCK DSS_API_TABLE+#200 - $,0
|
||
;[ ] R09
|
||
ENDIF
|
||
; DB low WINREST, low PUTCHAR, low PCHARS, low NOPS, low NOPS, low PRINT, low NOPS, low NOPS, low NOPS, low NOPS ; 9 5A..63
|
||
; DB high WINREST,high PUTCHAR,high PCHARS, high NOPS, high NOPS, high PRINT, high NOPS, high NOPS, high NOPS, high NOPS
|
||
;---------------------------------------------------------------------------------------------------------------------------------------------------------------;
|
||
;[INCLUDE]
|
||
;!TODO § ¬¥¨âì ¯®-¬ ªá¨¬®¬ã ¢áñ ¢ KEYINTER.ASM ¢ë§®¢ë ¡¨®á
|
||
INCLUDE "KEYINTER.ASM"
|
||
INCLUDE "API.ASM"
|
||
INCLUDE "DOS_Proc.asm"
|
||
INCLUDE "FS_Module.asm"
|
||
INCLUDE "Procedures.asm"
|
||
;INCLUDE "drivers/drv_to_sys_errors.asm" ; !TODO
|
||
|
||
; [ ] 26/06/2024& read only 64kb cluster ; !TODO cluster 64kb
|
||
CHECK_64kb_CLUSTER:
|
||
LD HL,(CORE_BUFFERS.FS_Buffer.BytesPerCluster)
|
||
; CF=0
|
||
ADC HL,HL
|
||
LD A,DSS_Error.sys.WRITE_PROTECT
|
||
RET NZ
|
||
CCF
|
||
RET
|
||
;
|
||
|
||
|
||
;!FIXIT ª ¡ãä¥à ¬
|
||
; Œ áᨢ «®£. ®¬¥à®¢ ¡ ®ª à áè¨à¥¨ï DSS
|
||
BANKTBL: BLOCK USING_MEMPAGES+1,#FF ; +1 ¤«ï COREPAGE
|
||
HANDBUF: BLOCK HANDBUF.SIZE,0
|
||
;
|
||
; ; FAT_DIRECTORY_RECORD ; !HARDCODE
|
||
MASKARE: BLOCK 8,0 ; ¨¬ï ä ©«
|
||
BLOCK 3,0 ; à áè.
|
||
BLOCK 21,0 ; 11+21=32
|
||
;
|
||
DISPLAY "DOS-MAIN end address: ",/H,$-1
|
||
;
|
||
|
||
;!TODO ª ¡ãä¥à ¬!
|
||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
/*
|
||
; 259
|
||
CurrentPath: DB 'X'
|
||
DB ':'
|
||
CurrentDirectory: DB '\'
|
||
.DEPTH: EQU DIRECTORY_PATH_LENGTH
|
||
BLOCK CurrentDirectory.DEPTH,0 ; ¥ .DEPTH-1 ç⮡ ¡ë« 0 ¢ ª®æ¥
|
||
;
|
||
; 257
|
||
WorkDirectory: DB '\'
|
||
.DEPTH: EQU DIRECTORY_PATH_LENGTH
|
||
BLOCK WorkDirectory.DEPTH,0 ; ¥ .DEPTH-1 ç⮡ ¡ë« 0 ¢ ª®æ¥
|
||
|
||
; 516
|
||
*/
|
||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
;
|
||
;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < <
|
||
;
|
||
;
|
||
CLEAR_ZONE.start EQU $
|
||
|
||
MODULE CORE_BUFFERS
|
||
BUFFERSplace _sBuffers=$
|
||
FM_BUF _sFM = BUFFERSplace.FileManipulator
|
||
.Size EQU _sFM
|
||
.FullSize EQU FMCOUNT*FM_BUF.Size
|
||
FS_Buffer _sFS_Buffer = BUFFERSplace.FS_Buffer
|
||
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
|
||
XSTACK _sStack = BUFFERSplace.Stack
|
||
.Spoint EQU XSTACK + _sStack
|
||
BUFFER EQU BUFFERSplace.Buffer
|
||
SECTOR_BUFFER EQU BUFFER ;!TODO ®â¤¥«¨âì SECTOR_BUFFER ®â BUFFER
|
||
MemoryTable EQU BUFFERSplace.MemoryTable
|
||
CurrentPath EQU BUFFERSplace.CurrentPath
|
||
CurrentDirectory EQU BUFFERSplace.CurrentDirectory
|
||
.DEPTH EQU DIRECTORY_PATH_LENGTH
|
||
WorkDirectory EQU BUFFERSplace.WorkDirectory
|
||
.DEPTH EQU DIRECTORY_PATH_LENGTH
|
||
BUFFER_CLP EQU BUFFERSplace.BUFFER_CLP ; ¡ãä¥à ¤«ï CMD ¢ Execute.asm
|
||
ENDMODULE
|
||
;
|
||
; CurrentPath EQU CORE_BUFFERS.BUFFERSplace + _sBuffers
|
||
; CurrentDirectory EQU CurrentPath + 2
|
||
; .DEPTH: EQU DIRECTORY_PATH_LENGTH
|
||
; ;
|
||
; WorkDirectory EQU CurrentDirectory + 1 + CurrentDirectory.DEPTH
|
||
; .DEPTH: EQU DIRECTORY_PATH_LENGTH
|
||
;
|
||
CLEAR_ZONE.size EQU _sBuffers
|
||
|
||
|
||
ASSERT (CLEAR_ZONE.start + _sBuffers)<#4000, "Warning!!! OUT OF SLOT0"
|
||
ASSERT (#4000 - CORE_BUFFERS.BUFFER_CLP) > #100, "Warning!!! No memory for buffer!!!"
|
||
|
||
DISPLAY "--- --- --- --- --- --- --- ---"
|
||
DISPLAY "CLEAR_ZONE.start ", /H, CLEAR_ZONE.start
|
||
DISPLAY "CLEAR_ZONE.Size ", /H, CLEAR_ZONE.size
|
||
DISPLAY "--- --- --- --- --- --- --- ---"
|
||
DISPLAY "Consist: "
|
||
DISPLAY " FM_BUF ", /H, CORE_BUFFERS.FM_BUF
|
||
DISPLAY " FM_BUF.Size: ", /H, CORE_BUFFERS.FM_BUF.Size
|
||
DISPLAY " FM_BUF.FullSize ", /H, CORE_BUFFERS.FM_BUF.FullSize
|
||
DISPLAY " FS_Buffer ", /H, CORE_BUFFERS.FS_Buffer
|
||
DISPLAY " FS_Buffer.Size ", /H, CORE_BUFFERS.EXEBUFF - CORE_BUFFERS.FS_Buffer
|
||
DISPLAY " EXEBUFF ", /H, CORE_BUFFERS.EXEBUFF
|
||
DISPLAY " Size ", /H, CORE_BUFFERS.XSTACK - CORE_BUFFERS.EXEBUFF
|
||
DISPLAY " XSTACK ", /H, CORE_BUFFERS.XSTACK
|
||
DISPLAY " Size ", /H, CORE_BUFFERS.BUFFER - CORE_BUFFERS.XSTACK
|
||
DISPLAY " BUFFER ", /H, CORE_BUFFERS.BUFFER
|
||
DISPLAY " Size ", /H, CORE_BUFFERS.MemoryTable - CORE_BUFFERS.BUFFER
|
||
DISPLAY " MemoryTable ", /H, CORE_BUFFERS.MemoryTable
|
||
DISPLAY " Size ", /H, _sBuffers - (CORE_BUFFERS.MemoryTable - CORE_BUFFERS.BUFFERSplace)
|
||
DISPLAY "--- --- --- --- --- --- --- ---"
|
||
DISPLAY "CLEAR_ZONE.End ", /H, CLEAR_ZONE.start + CLEAR_ZONE.size
|
||
DISPLAY "--- --- --- --- --- --- --- ---"
|
||
|
||
EXPORT CORE_BUFFERS.BUFFERSplace
|
||
EXPORT CORE_BUFFERS.FM_BUF
|
||
EXPORT CORE_BUFFERS.FS_Buffer
|
||
EXPORT CORE_BUFFERS.EXEBUFF
|
||
EXPORT CORE_BUFFERS.XSTACK
|
||
EXPORT CORE_BUFFERS.BUFFER
|
||
EXPORT CORE_BUFFERS.SECTOR_BUFFER
|
||
EXPORT CORE_BUFFERS.MemoryTable
|
||
EXPORT CORE_BUFFERS.CurrentDirectory
|
||
EXPORT CORE_BUFFERS.WorkDirectory
|
||
/*
|
||
;R11 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||
FM_BUF _sFM=$
|
||
.Size EQU _sFM
|
||
.FullSize EQU FMCOUNT*FM_BUF.Size
|
||
|
||
;????? ¥ £à㧨âáï «¨ ¯®«®áâìî ᥪâ®à ¢ 512 ¡ ©â®¢ ¯à¨ § £à㧪¥ åí¤¥à ?
|
||
EXEBUFF _sEXE_HEADER=$+FM_BUF.FullSize
|
||
; EXEBUFF:
|
||
; DB "EXE"
|
||
; DB #00
|
||
; OFFCOD1 DW #0000
|
||
; OFFCOD2 DW #0000
|
||
; LOADER DW #0000
|
||
; DW #0000
|
||
; DW #0000
|
||
; DW #0000
|
||
; LD_ADDR DW #0000
|
||
; PC_REG DW #0000
|
||
; SP_REG DW #0000
|
||
; BLOCK 512-($-EXEBUFF),0
|
||
|
||
;(!!!HERE STACK FOR EXEC!!!)
|
||
; BLOCK 255,0
|
||
;XSTACK DB #00
|
||
XSTACK EQU EXEBUFF+_sEXE_HEADER+255
|
||
|
||
BUFFER EQU XSTACK+1
|
||
SECTOR_BUFFER EQU BUFFER
|
||
;R11 ////////////////////////////////
|
||
*/
|
||
|
||
;
|
||
;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < <
|
||
;
|
||
|
||
|
||
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||
; § âàñâáï ¯®á«¥ ¨¨æ¨ «¨§ 樨
|
||
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||
|
||
|
||
; <20>¥à¢ë© áâ àâ á¨á⥬ë, ¯®á«¥ ¨¨æ¨ «¨§ 樨 ¤à¥á ¢ â ¡«¨æ¥ ¬¥ï¥âáï VERSION
|
||
F_START: DI
|
||
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||
;LD (.saveDRV),A
|
||
LD H,A
|
||
LD (.saveDRV),HL ; H - ®¬¥à ãáâனá⢠, L - ®¬¥à à §¤¥« ãáâனá⢥
|
||
;
|
||
|
||
;R12
|
||
LD HL,0 ; ¯¨á âì ¢ ¨ªã¤
|
||
LD C,BIOS.FN_VERSION
|
||
RST ToBIOS
|
||
JR C,.err_oldBIOS
|
||
EX DE,HL
|
||
LD DE,MINIMUM_BIOS_VERSION
|
||
SBC HL,DE
|
||
JR C,.err_oldBIOS
|
||
; LD A,(.saveDRV+1)
|
||
; CP 2 ;¯à®¢¥àª § £à㧪ã á ¤¨áª¥âë, ¥á«¨ á ¤¨áª¥âë, â® ¬®¦® ¯à®¨£®à¨âì § ¯ã᪠BIOS ¨¦¥ 2.55
|
||
; JR NC,.err_oldBIOS
|
||
; LD HL,#C9AF ; XOR A : RET opcodes
|
||
; LD (DRV_CONTENT + INITDVC.if_old),HL
|
||
;
|
||
|
||
.good: CALL DEPLOY ;R07 ;íâ ¯à®æ¥¤ãà § âàñâáï ¯®á«¥ ¨á¯®«¥¨ï
|
||
RET C ;R10
|
||
CALL KEYBOARD_INIT
|
||
CALL PRINT_INIT
|
||
LD C,Dss.Mouse.Init
|
||
RST ToDSS.Mouse
|
||
LD A,(VMODE)
|
||
LD C,Dss.Mouse.SetVideoMode
|
||
RST ToDSS.Mouse
|
||
;CALL INITDVC ;R05
|
||
;R05
|
||
LD C,Dss.DRV.Init
|
||
RST ToDSS.DRV
|
||
LD (LDRIVE),A
|
||
;R05
|
||
.saveDRV+1:
|
||
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||
LD HL,0 ; H - ®¬¥à ãáâனá⢠, L - ®¬¥à à §¤¥« ãáâனá⢥
|
||
;LD A,H
|
||
;LD A,0
|
||
;
|
||
;LD B,1
|
||
CALL BOOTDSK.SET
|
||
RET C
|
||
;
|
||
EI
|
||
;Set new address fn. VERSION
|
||
LD HL,DSS_API_TABLE
|
||
LD (HL),low VERSION ;R03
|
||
INC H
|
||
LD (HL),high VERSION ;R03
|
||
JP CLEAR_BUFFER_AND_INIT_PROC
|
||
;
|
||
;R12
|
||
.err_oldBIOS:
|
||
IN A,(SLOT0)
|
||
OUT (SLOT3),A
|
||
LD HL,.err_oldBIOS_message + SLOT3.MEM_ADDR
|
||
;LD C,Dss.PChars
|
||
;RST ToDSS
|
||
CALL PCHARS
|
||
SCF
|
||
RET
|
||
.err_oldBIOS_message:
|
||
DB "\r\nWARNING! This version of DSS requires BIOS v"
|
||
DB STR_MINIMUM_BIOS_VERSION
|
||
DZ " or later to boot from IDE."
|
||
;
|
||
|
||
DEPLOY: ;Allocate memory
|
||
LD BC,USING_MEMPAGES*256 + BIOS.GetMem
|
||
RST ToBIOS
|
||
RET C ;R10
|
||
LD C,A
|
||
|
||
IN A,(SLOT3)
|
||
PUSH AF
|
||
IN A,(SLOT0)
|
||
LD (DRV_CONTENT + DRV_PAGE.MAIN_PAGE_NUMBER),A ;!TEST
|
||
OUT (SLOT3),A
|
||
|
||
LD A,C
|
||
LD HL,BANKTBL + #C000
|
||
LD C,BIOS.GetMemBlkPages
|
||
RST ToBIOS
|
||
; ¤®«¦ ¨¤â¨ ¯®á«¥ GetMemBlkPages, ç⮡ ¢¬¥áâ®
|
||
; § ªàë¢ èª¨ #FF ¯®áâ ¢¨âì áâà ¨æã COREPAGE
|
||
LD HL,BANKTBL + COREPAGE
|
||
IN A,(SLOT0)
|
||
LD (HL),A
|
||
; ¤«ï API ¤à ©¢¥à ¬ë誨
|
||
LD (MOUSE_HANDLER.CorePage),A
|
||
LD A,(BANKTBL + DRVPAGE)
|
||
LD (RST_0x30.drv_page),A
|
||
|
||
POP AF
|
||
OUT (SLOT3),A
|
||
|
||
SET_PAGE_X DRVPAGE
|
||
|
||
PUSH AF
|
||
LD HL,DRV_CONTENT
|
||
LD DE,#C000
|
||
LD BC,DRV_CONTENT.SIZE
|
||
LDIR
|
||
IN A,(SLOT3)
|
||
LD (DRV_PG_NUMBER),A
|
||
POP AF
|
||
OUT (SLOT3),A
|
||
AND A ;R10
|
||
RET
|
||
|
||
IF ENVVALUE != CORE_BUFFERS.BUFFER
|
||
ASSERT "Warning! ENVVALUE != BUFFER"
|
||
//BLOCK 1000,0
|
||
ENDIF
|
||
|
||
;--- --- --- --- [Build version] --- --- --- ---;
|
||
; C_OSTYPE
|
||
;--- --- --- --- --- --- --- --- --- --- --- ---;
|
||
|
||
DISPLAY "FAT MODULE SIZE: ",/A,FAT_MODULE_SIZE
|
||
DISPLAY "DEPLOY end address: ",/H,$
|
||
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||;
|
||
DISPLAY "Space for DRV-MAIN: ",/A,#4000-$," bytes."
|
||
DRV_CONTENT:
|
||
DISP 0
|
||
INCLUDE 'DRV-MAIN.ASM'
|
||
ENT
|
||
DRV_CONTENT.SIZE EQU $-DRV_CONTENT
|
||
|
||
BIN_END_ADDRESS EQU $
|
||
|
||
DISPLAY "END ADDRESS: ",/H,BIN_END_ADDRESS
|
||
DISPLAY "Memory leacks when > ",/H, #4000+SUBLOAD_SIZE*512
|
||
ASSERT $ < (#4001+SUBLOAD_SIZE*512),'-> Memory leack!!!';
|
||
ASSERT DRV_CONTENT.SIZE < #4001,'-> Drivers code size > #4000!!!';
|
||
;[END]
|
||
|
||
;
|
||
|
||
|
||
; DTA DB " "
|
||
; DB " "
|
||
; DB #20
|
||
; DW 0,0,0,0,0
|
||
; DW 0
|
||
; DW 0
|
||
; CLUSTER DW 0
|
||
; SIZE DW 0,0
|
||
; ASCIIZ DB "FILENAME.EXT",#00
|
||
|
||
|
||
;R06
|
||
;R06 BUFFER
|
||
;R06 SECTOR_BUFFER DB ". ",#10
|
||
;R06 DW 0,0,0,0,0
|
||
;R06 DW #0000
|
||
;R06 DW #0000
|
||
;R06 DW #0000
|
||
;R06 DW #0000,0000
|
||
;R06 DB ".. ",#10
|
||
;R06 DW 0,0,0,0,0
|
||
;R06 DW #0000
|
||
;R06 DW #0000
|
||
;R06 DW #0000
|
||
;R06 DW #0000,0000
|
||
;R06 DS 512-64 ;,0 |