First init

This commit is contained in:
Anatoliy Belyanskiy 2024-07-29 01:59:31 +10:00
parent b36fd84df4
commit ace6b0904b
176 changed files with 47655 additions and 0 deletions

164
Crazy BIOS/BIOS.asm Normal file
View File

@ -0,0 +1,164 @@
;
;----------------[TO DO]----------------
; DEFINE path to rom, exp, build, etc.
; DEFINE path to including files for rom, exp, loader, etc...
; ...
;---------------------------------------
;=======================================
; DEFDEVICE SPRINTER, #4000, 256
DEVICE SPRINTER
; ENCODING "DOS"
;=======================================
;------------[LUA functions]------------;
includelua 'Shared_includes/lua/Functions.lua'
;---------------------------------------;
;-----------[Shared Includes]-----------
INCLUDE 'src/bios/shared/includes.inc' ; Includes
;---------------------------------------
LUA PASS1
local date, month, year = Get_date_RU(sj.get_define("__DATE__"))
BuildDate = "'" .. date .. "." .. month .. "." .. year .. "'"
sj.insert_define("BUILD_DATE", BuildDate)
ENDLUA
LUA ALLPASS
sj.insert_define("BUILD_DATE", BuildDate)
ENDLUA
IF PACKED_MAIN
;------------[MAIN prebuild]------------;
LUA PASS1
-- ­ áâà ¨¢ ¥¬ ¯ãâì ¤® 㯠ª®¢é¨ª 
detected_os = Detect_os()
print ("OS detected:", detected_os)
print ()
if detected_os == "Windows" then
pack_prog = "src\\bin\\hrust.exe Build\\Bin\\temp\\MAIN.PAK Build\\Bin\\temp\\MAIN.BIN"
elseif detected_os == "MacOS" then
pack_prog = "src/bin/mhmt -hst -zxh Build/Bin/temp/MAIN.BIN Build/Bin/temp/MAIN.PAK"
elseif detected_os == "Linux" then
pack_prog = "src/bin/mhmt -hst -zxh Build/Bin/temp/MAIN.BIN Build/Bin/temp/MAIN.PAK"
end
-- ª®¬¯¨«ïæ¨ï ¤«ï ¯®«ã祭¨ï ᦠ⮣® ä ©«  MAIN ¨ 宫®á⮩ ¯à®å®¤ Set_Pictures.asm
if (os.execute("sjasmplus -DPREBUILD=1 -Wall --msg=war --nologo --syntax=w --fullpath --lst=Build/Prebuilds.LST SRC/BIOS/ROM/SETUP/MAIN.ASM")) then
print("--[ MAIN.ASM Prebuild DONE ]--")
if (os.execute(pack_prog)) then
print("--[ Hrusting MAIN.BIN DONE ]--")
print(" ")
else
print("--[ Hrusting MAIN.BIN ERROR!!! ]--")
os.exit(1)
end
else
print("--[ MAIN.ASM Prebuild ERROR!!! ]--")
os.exit(1)
end
ENDLUA
;---------------------------------------;
ENDIF
IF PACKED_MAIN
;----------[MAIN's referenses]----------; Š®¬¯¨«ïæ¨ï ¤«ï ¯®«ã祭¨ï  ¤à¥á®¢ ¬¥â®ª ¨ ¯à®æ¥¤ãà
MMU 2 e, 18 ; áâà ­¨æ  18 ¢ ¡ ­ªã 2 ¨ ¯à®¢¥àª  ­  £à ­¨æë.
ORG COMPILE_ADDR.MAIN
INCLUDE 'src/bios/ROM/SETUP/MAIN.asm'
;---------------------------------------
ENDIF
; Building page 8 of Sprinter ROM
;-----------------[EXP]-----------------
MMU 0 e, 8 ; áâà ­¨æ  8 ¢ ¡ ­ªã 0 ¨ ¯à®¢¥àª  ­  £à ­¨æë
ORG COMPILE_ADDR.EXP
DEFINE+ IsInBIOS 1
OUTPUT 'Build/Bin/EXP.BIN'
ShowInfo 'EXP block Start', 0 ; !!!!! test
INCLUDE 'src/bios/EXP/EXP.asm'
ShowInfo 'EXP block End', 0 ; !!!!! test
OUTEND
;---------------------------------------
; Building page 0 of Sprinter ROM
;-----------------[ROM]-----------------
MMU 0 e, 0 ; áâà ­¨æ  0 ¢ ¡ ­ªã 0 ¨ ¯à®¢¥àª  ­  £à ­¨æë.
ORG ROM_MAP.ROM
DEFINE+ IsInBIOS 0
OUTPUT 'Build/Bin/ROM.BIN'
ShowInfo 'ROM block Start', 0 ; !!!!! test
INCLUDE 'src/bios/ROM/ROM.asm'
ShowInfo 'ROM block End', 0 ; !!!!! test
OUTEND
UNDEFINE IsInBIOS
;---------------------------------------
;
; Building page 12 of Sprinter ROM
;------[Loader with bitstream K30]------
MMU 0 3, 12 ; áâà ­¨æë 12-15 ¢ ¡ ­ª¨ 0-3.
ORG ROM_MAP.LOADER
OUTPUT 'Build/Bin/LOADER_K30.BIN'
Conf_loader K30
BLOCK #10000-$,#FF
OUTEND
;---------------------------------------
; Building page 22 of Sprinter ROM
;------[Loader with bitstream K50]------
MMU 0 3, 22 ; áâà ­¨æë 22-25 ¢ ¡ ­ª¨ 0-3.
ORG ROM_MAP.LOADER
OUTPUT 'Build/Bin/LOADER_K50.BIN'
;!TODO ᤥ« âì 㯠ª®¢é¨ª ¡¨âáâਬ  âãâ ­  LUA
Conf_loader K50
BLOCK #10000-$,#FF
OUTEND
;---------------------------------------
;
; Building page 1 of Sprinter ROM
;-----------------[LOGO]-----------------
MMU 1 e, 1 ; áâà ­¨æ  1 ¢ ¡ ­ªã 1 ¨ ¯à®¢¥àª  ­  £à ­¨æë.
ORG ROM_MAP.LOGO
OUTPUT 'Build/Bin/LOGO.BIN'
INCLUDE 'src/bios/logo/Set_Pictures.asm'
OUTEND
;---------------------------------------
;
;EXPORT ROM_NUMBER ; !FIXIT part1, part2 ¤«ï Flasher
EXPORT BOARD_INFO.number
EXPORT BOARD_INFO.type
EXPORT BoardID.start
EXPORT BoardID.end
EXPORT FN_CRIPT.cnf
EXPORT ID_SPRINTER.bitstream_ver
EXPORT bitstream_ver_hex
;EXPORT ID_Version
;EXPORT ID_SPRINTER.BIOS_ver
;EXPORT BIOS_ver_hex
;EXPORT Disk_subsystem_ver_hex
EXPORT EXP_ID.VER ; ‚¥àá¨ï ¡¨®á 
EXPORT EXP_ID.MOD
;EXPORT ROM_ID.VER ; ‚¥àá¨ï ¤¨áª®¢®© ¯®¤á¨á⥬ë
;EXPORT ROM_ID.MOD
EXPORT CNF_ID.VER ; ‚¥àá¨ï ª®­äë
EXPORT CNF_ID.MOD
EXPORT msgStrings.str_ACEX_MODEL
EXPORT msgRusStrings.str_ACEX_MODEL
EXPORT BETA_BUILD
; LUA ALLPASS
; print ("DEPACKER", sj.get_label("DEPACKER.PackedMAIN"))
; print ("UnPacker", sj.get_label("UnPacker.PackedMAIN"))
; ENDLUA

111
Crazy BIOS/BUILD.a80 Normal file
View File

@ -0,0 +1,111 @@
/*
;------------[LUA functions]------------;
includelua 'Shared_Includes/LUA/Functions.lua'
;---------------------------------------;
DEFINE PICTURE_FILE './src/bios/logo/psfathers.bmp'
LUA PASS1
-- <20>஢¥à塞 BMP, ¤®áâ ñ¬ ¨§ ­¥£® ¯ à ¬¥âàë, ०¥¬ ­  ªã᪨
bmp_width, bmp_height, bmp_image_size, bmp_image_offset, bmp_colors = Get_bmp8bit_values (sj.get_define("PICTURE_FILE"))
if bmp_width ~= 128 then sj.error("Invalid BMP width", bmp_width) end
if bmp_height ~= 72 then sj.error("Invalid BMP height", bmp_height) end
if bmp_colors ~= 256 then sj.error("Invalid BMP number of colors", bmp_colors) end
if not File_save(sj.get_define("PICTURE_FILE"), "./Build/Bin/LOGO_PAL.BIN", bmp_image_offset-1024, 1024) then sj.error("Palete save error!") end
if not File_save(sj.get_define("PICTURE_FILE"), "./Build/Bin/LOGO_DAT.BIN", bmp_image_offset, bmp_image_size) then sj.error("Image data save error!") end
ENDLUA
*/
INCLUDE 'shared/defines.inc'
DEFINE IMG_RECOVERY 'src/bios/shared/recovery.img'
;DEFINE IMG_RECOVERY 'src/bios/shared/recovery_tst.img'
;
;[--------------------------------------------------------------------------]
MACRO Set_Block text, blk_addr
.tmp equ $
BLOCK blk_addr-.tmp,#FF
DISPLAY text, /H, $-.tmp
ENDM
;[--------------------------------------------------------------------------]
DEFINE SP_128_BIN INCBIN 'src/ZX_ROMS/NEW/SP_128.BIN'
DEFINE SP__48_BIN INCBIN 'src/ZX_ROMS/NEW/SP__48.BIN'
DEFINE SP_TRDOS_BIN INCBIN 'src/ZX_ROMS/NEW/SP_TRDOS.BIN'
;[--------------------------------------------------------------------------]
MACRO ROM_BUILD bitstream
;PAGE 0
INCBIN 'Build/Bin/ROM.BIN'
Set_Block 'ROM free space: ', #4000
;
;PAGE 1
; INCBIN 'Build/Bin/LOGO_PAL.BIN'
; INCBIN 'Build/Bin/LOGO_DAT.BIN'
INCBIN 'Build/Bin/LOGO.BIN'
Set_Block 'LOGO free space: ', #8000
;
;
;PAGE 2 ZX Page - #42
SP_128_BIN
Set_Block 'SP_128 free space: ', #C000
;
;PAGE 3 ZX Page - #43
SP__48_BIN
Set_Block 'SP_48 free space: ', #10000
;
;PAGE 4 ZX Page - #44
SP_TRDOS_BIN
Set_Block 'SP_TRD free space: ', #14000
;
;PAGE 5 Recovery image part 1
INCBIN IMG_RECOVERY,0,#C000
DISPLAY "ROM Disk recovery part1, pages 5..7: 1x4000..2x0000"
;
;
;PAGE 8
INCBIN 'Build/Bin/EXP.BIN'
;INCBIN 'Build/CrazyBlaster.raw'
Set_Block 'EXP free space: ', #24000
;
;PAGE 9-11 (#09, #0A, #0B) Recovery image part 2
INCBIN IMG_RECOVERY,#C000,#C000
DISPLAY "ROM Disk recovery part2, pages 9..11: 2x4000..3x0000"
Set_Block 'Empty space: ', #30000
;
;PAGE 12-15 (#0C, #0D, #0E, #0F)
INCBIN bitstream
Set_Block 'Loader & Bitstream free space: ', #40000
;
ENDM
;[--------------------------------------------------------------------------]
;[--------------------------------------------------------------------------]
ORG 0
DISPLAY '[ Building ROM for 1K30 ]'
OUTPUT 'Build/_SPRIN.BIN'
ROM_BUILD 'Build/Bin/LOADER_K30.BIN'
OUTEND
DISPLAY '[ Building ROM for 1K30 done ]'
DISPLAY ' '
DISP 0
DISPLAY '[ Building ROM for 1K50 ]'
OUTPUT 'Build/_SPRIN50.BIN'
ROM_BUILD 'Build/Bin/LOADER_K50.BIN'
OUTEND
DISPLAY '[ Building ROM for 1K50 done ]'
ENT
;[--------------------------------------------------------------------------]
;

View File

@ -0,0 +1,766 @@
;
MACRO _mNoDrive_5xTable numberOFdrives, byteOFword
IF byteOFword
DUP numberOFdrives
DB high FN_RESERVED_5x ;#50 - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_ABSENT_5x ;#51
DB high FN_ABSENT_5x ;#52
DB high FN_ABSENT_5x ;#53
DB high FN_ABSENT_5x ;#54
DB high FN_ABSENT_5x ;#55
DB high FN_ABSENT_5x ;#56
DB high FN_ABSENT_5x ;#57
DB high FN_ABSENT_5x ;#58
DB high FN_ABSENT_5x ;#59
DB high DRV_VERSION ;#5A - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5B - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5C - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5D - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5E - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high DRV_LIST ;#5F - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
EDUP
ELSE
DUP numberOFdrives
DB low FN_RESERVED_5x ;#50 - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_ABSENT_5x ;#51
DB low FN_ABSENT_5x ;#52
DB low FN_ABSENT_5x ;#53
DB low FN_ABSENT_5x ;#54
DB low FN_ABSENT_5x ;#55
DB low FN_ABSENT_5x ;#56
DB low FN_ABSENT_5x ;#57
DB low FN_ABSENT_5x ;#58
DB low FN_ABSENT_5x ;#59
DB low DRV_VERSION ;#5A - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5B - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5C - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5D - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5E - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low DRV_LIST ;#5F - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
EDUP
ENDIF
ENDM
;
_mInfoALIGN 256,0
;=========================================================[ MAIN TABLE ]
; !FIXIT ¯®¯à ¢¨âì ¢ ¤®ª¥ ­ §¢ ­¨ï ä㭪権, ç áâì ­¥ ᮢ¯ ¤ ¥â
TAB_FNS:
; 00 - #3F
DUP #40
DB low FN_RESERVED
EDUP
;
; #4x
;--------------
DB low FN_HDD_INIT ; #40 ˆ­¨æ¨ «¨§ æ¨ï ¢¨­ç¥áâ¥à 
DB low FN_HDD_RECAL ; #41 <20>¥ª «¨¡à®¢ª  ¢¨­ç¥áâ¥à 
DB low FN_HDD_TEST_IDE ; #42 ’¥áâ ­ «¨ç¨ï ¨­â¥àä¥©á  IDE
DB low FN_HDD_PREPARE ; #43 <20>®¤£®â®¢ª  ¢¨­ç¥áâ¥à  ª ®¯¥à æ¨¨ ç⥭¨ï/§ ¯¨á¨
DB low FN_HDD_READ_BPB ; #44 —¨â âì BPB ¯¥à¢®£® à §¤¥« 
DB low FN_HDD_READ ; #45 —¨â âì ᥪâ®à  á ¢¨­ç¥áâ¥à 
DB low FN_HDD_WRITE ; #46 <20>¨á âì ᥪâ®à  ­  ¢¨­ç¥áâ¥à
DB low FN_HDD_PART ; #47 set IDE number (<28> áâனª  ¯ àâ¨æ¨© ¨ master/slave)???
DB low FN_HDD_READ_NEXT ; #48 —¨â âì á«¥¤ãî騩 ᥪâ®à (ONLY FOR LBA!)
DB low FN_RESERVED ; #49
DB low FN_RESERVED ; #4A
DB low FN_RESERVED ; #4B
DB low FN_RESERVED ; #4C
DB low FN_RESERVED ; #4D
DB low FN_RESERVED ; #4E
DB low FN_RESERVED ; #4F
;--------------
;
; 5x
;--------------
DB low FN_RESERVED_5x ;#50
DB low FN_5x_Parser_1 ;#51 - Reset drive
DB low FN_5x_Parser_2 ;#52 - Long read
DB low FN_5x_Parser_3 ;#53 - Long write
DB low FN_5x_Parser_4 ;#54 - Verify sectors
DB low FN_5x_Parser_5 ;#55 - Read sectors
DB low FN_5x_Parser_6 ;#56 - Write sectors
DB low FN_5x_Parser_7 ;#57 - Detect
DB low FN_5x_Parser_8 ;#58 - Get Media parameters
DB low FN_5x_Parser_9 ;#59 - Set Media parameters
DB low DRV_VERSION ;#5A - Version number
DB low FN_RESERVED_5x ;#5B
DB low FN_RESERVED_5x ;#5C
DB low FN_RESERVED_5x ;#5D
DB low FN_5x_Parser_E ;#5E
DB low DRV_LIST ;#5F
;--------------
; 60 - #7F
DUP #20
DB low FN_RESERVED
EDUP
; 8x
DB low LP_OPEN_S ; #80 ®âªàë⨥ ®ª­ 
DB low LP_PRINT_ALL ; #81 ¯¥ç âì ᨬ¢®«  ¢ ®ª­®
DB low LP_PRINT_SYM ; #82 ¯¥ç âì ᨬ¢®«  ¡¥§  âà
DB low LP_PRINT_ATR ; #83 ¯¥ç âì ⮫쪮  âਡãâ 
DB low LP_SET_PLACE ; #84 ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
DB low LP_PRINT_LINE ; #85 ¯¥ç âì áâப¨ ¤«¨­®© B
DB low LP_PRINT_LINE2 ; #86 ¯¥ç âì áâப¨ -//- ¡¥§  âਡã⮢
DB low LP_PRINT_LINE3 ; #87 ¯¥ç âì áâப¨ ¤«¨­®© B ¤® D
DB low LP_PRINT_LINE4 ; #88 ¯¥ç âì áâப¨ -//- ¡¥§  âਡã⮢
DB low LP_CLS_WIN ; #89
DB low LP_SCROLL_UD ; #8A
DB low LP_PRINT_LINE5 ; #8B
DB low LP_PRINT_LINE6 ; #8C
DB low LP_CLS_WIN2 ; #8D
DB low LP_GET_PLACE ; #8E
DB low FN_TURBO ; #8F
; 9x
DB low EMM.GetMemSize ; #90 ­¥à §àãè î饥 ®¯à¥¤¥«¥­¨¥ ®¡ê¥¬  އ“.
DB low EMM.InitMem ; #91 ¨­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨
DB low EMM.GetMemRMD ; #92 ¯®«ãç¨âì ¡«®ª ¯ ¬ï⨠¤«ï à ¬¤¨áª 
DB low EMM.FreeMemRMD ; #93 ®á¢®¡®¤¨âì ¡«®ª ¯ ¬ï⨠ࠬ¤¨áª 
DB low EMM.GetMemPageRMD ; #94 ¯®«ãç¨âì ­®¬¥àa áâà ­¨æ RAM-Disk
DB low EMM.GetMemPageNext ; #95 ¯®«ãç¨âì á«¥¤ãîéãî áâà ­¨æã
DB low EMM.GetBanksPorts ; #96 ¯®«ãç¨âì  ¤à¥á  ¯®à⮢
DB low EMM.CheckColdInit ; #97 ¯à®¢¥àª  ­  宫®¤­ë© áâ àâ ¨ ¨­¨æ¨ «¨§ æ¨¨ ¥á«¨ ®­ ;????? ­ã¦­  «¨ ª ª API?
DB low RAMD_CALC_PAGE ; #98 ‚ëç¨á«¥­¨¥ áâà ­¨æë ¨  ¤à¥á  ¢ RAM-Disk ¯®  ¡á®«îâ­®¬ã ­®¬¥àã ᥪâ®à 
DB low SET_DISK_REDIR ; #99 “áâ ­®¢¨âì ­  ⥪ã騩 ¤à ©¢ ¯¥à¥­ §­ ç¥­¨¥ (áâ à ï äã­ªæ¨ï ¤«ï TR-DOS!) ;?????
DB low GET_DISK_REDIR ; #9A <20>®«ãç¨âì ⨯ ­ §­ ç¥­¨ï ­  ⥪ã騩 ¤à ©¢ (áâ à ï äã­ªæ¨ï ¤«ï TR-DOS!)
DB low GET_RAMD_NUM ; #9B ¯®«ãç¨âì ­®¬¥à ram disk ¯® ¥£® block id
DB low SWAP_RAM_DRIVES ; #9C ᬥ­¨âì ­ ¡®à à ¬¤¨áª®¢ ZX <-> Sp2000
DB low EMM.DivMemBlocks ; #9D à §¤¥«¥­¨ï ¡«®ª  ­  ¤¢ .
DB low EMM.MergeMemBlocks ; #9E ᫨ﭨ¥ ¤¢ãå ¡«®ª®¢
DB low EMM.FullInit ; #9F ¨­¨æ¨ «¨§ æ¨ï ¢á¥© ¯ ¬ïâ¨, á¨á⥬­ëå ¯¥à¥¬¥­­ëå
; Ax
DB low PIC_FN0 ; #A0 ŽŠ<E28099>ˆ… ŽŠ<C5BD>€ - Fn 0A0h
DB low PIC_FN1 ; #A1 ‚›‚…‘’ˆ ’Ž—Š“
DB low PIC_FN2 ; #A2 ‚›‚Ž„ ˆ<E280B9>ˆˆ COPY
DB low PIC_FN3 ; #A3 ‚›‚Ž„ ˆ<E280B9>ˆˆ FILL
DB low PIC_SET_PAL ; #A4 ‚›‚Ž„ <20>ˆ<CB86>
DB low PIC_FN5 ; #A5 “<E28099>ŽŠ€ RGMOD
DB low SET_PAL_INIT ; #A6 A - page_pal, E - ­®¬¥à ¯ «¨âàë, B - ⨯ ¯ «¨âàë
DB low PIC_FN7 ; #A7 <20>¨á®¢ ­¨¥ «¨­¨¨ ®¤­®£® 梥â 
DB low PIC_FN8 ; #A8 <20>¨á®¢ ­¨¥ à §­®æ¢¥â­®© «¨­¨¨
DB low PIC_FN9 ; #A9 ­¥â
DB low PIC_FN10 ; #AA ­¥â
DB low PIC_FN11 ; #AB ­¥â
DB low PIC_FN12 ; #AC ­¥â
DB low PIC_FN14 ; #AD ­¥â
DB low PIC_FN14 ; #AE ­¥â
DB low PIC_FN15 ; #AF ­¥â
; Bx
DB low WIN_OPEN ; #B0 ®âªàë⨥ ®ª­  ¯® ®¯¨á â¥«î
DB low WIN_CLOSE ; #B1 § ªàë⨥ ®ª­ 
DB low WIN_COPY ; #B2 á®åà ­¥­¨¥ ⥪á⮢®£® ®ª­  ¢ ¯ ¬ïâ¨
DB low WIN_RESTORE ; #B3 ¢®ááâ ­®¢«¥­¨¥ ⥪á⮢®£® ®ª­  ¨§ ¯ ¬ïâ¨
DB low WIN_GET_SYM ; #B4 ¢§ïâì ᨬ¢®«
DB low WIN_PUT_SYM ; #B5 ¯®«®¦¨âì ᨬ¢®«
DB low WIN_SET_ZG ; #B6 § £à㧪  §­ ª®£¥­¥à â®à 
DB low WIN_MOVE ; #B7 ¯¥à¥¬¥áâ¨âì ®ª­®
DB low WIN_GET_ZG ; #B8 ¯®«ãç¨âì §­ ª®£¥­¥à â®à
DB low FN_RESERVED ; #B9
DB low FN_RESERVED ; #BA
DB low FN_RESERVED ; #BB
DB low FN_RESERVED ; #BC
DB low FN_RESERVED ; #BD
DB low FN_RESERVED ; #BE
DB low FN_RESERVED ; #BF
; Cx
DB low EMM.GetMemSize ; #C0 ¯®«ãç¨âì ¤ ­­ë¥ ®¡ ®¡ê¥¬¥ ¯ ¬ï⨠¨ ª®«-¢® ᢮¡. áâà.
DB low EMM.InitMem ; #C1 ¨­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨
DB low EMM.GetMem ; #C2 ¯®«ãç¨âì ¡«®ª ¯ ¬ïâ¨
DB low EMM.FreeMem ; #C3 ®á¢®¡®¤¨âì ¡«®ª ¯ ¬ïâ¨
DB low EMM.GetMemPage ; #C4 ¯®«ãç¨âì ­®¬¥à áâà ­¨æë ¢ ¡«®ª¥ ¯ ¬ïâ¨
DB low EMM.GetMemBlkPages ; #C5 ¯®«ãç¨âì ᯨ᮪ áâà ­¨æ ¡«®ª  ¯ ¬ïâ¨
DB low EMM.GetBanksPorts ; #C6 ¯®«ãç¨âì  ¤à¥á  ¯®à⮢ ®ª®­
DB low EMM.GetMemPageNext ; #C7 ¯®«ãç¨âì á«¥¤ãîéãî áâà ­¨æã ¡«®ª 
DB low BLK_RD_WR ; #C8 äã­ªæ¨ï ç⥭¨ï/§ ¯¨á¨ ¢ ¡«®ª ¯ ¬ïâ¨
DB low BLK_TO_RAMD ; #C9 ­ §­ ç¨âì ¡«®ª RAM-Disk-ã
DB low RAMD_CLEAR ; #CA ®á¢®¡®¤¨âì RAM-Disk
DB low RAMD_TO_DRV ; #CB ­ §­ ç¨âì RAM-Disk ­  ¤¨áª®¢®¤
DB low FDD_TO_DRV ; #CC ­ §­ ç¨âì REAL_DRIVE ­  ¤¨áª®¢®¤
DB low HDD_TO_DRV ; #CD ­ §­ ç¨âì HDD ­  ¤¨áª®¢®¤
DB low GET_RAMD_ST ; #CE ¯®«ãç¨âì ⨯ ­ §­ ç¥­¨ï ­  RAM-Disk
DB low GET_DRV_ST ; #CF ¯®«ãç¨âì ⨯ ­ §­ ç¥­¨ï ­  ¤¨áª®¢®¤
; Dx
DB low FN_LIB ; #D0
DB low FN_LIB ; #D1
DB low FN_LIB ; #D2
DB low FN_LIB ; #D3
DB low FN_LIB ; #D4
DB low FN_LIB ; #D5
DB low FN_LIB ; #D6
DB low FN_LIB ; #D7
DB low FN_LIB ; #D8
DB low FN_LIB ; #D9
DB low FN_LIB ; #DA
DB low FN_LIB ; #DB
DB low FN_LIB ; #DC
DB low FN_LIB ; #DD
DB low FN_LIB ; #DE
DB low FN_LIB ; #DF
; Ex
DB low LP_PR_LINE_DIR ; #E0
DB low FN_RESERVED ; #E1
DB low FN_RESERVED ; #E2
DB low FN_RESERVED ; #E3
DB low FN_RESERVED ; #E4
DB low FN_RESERVED ; #E5
DB low FN_RESERVED ; #E6
DB low FN_RESERVED ; #E7
DB low FN_SEND_BYTE ; #E8 ¯®á« âì ¡ ©â ç¥à¥§ PC_link
DB low FN_RESEIVE_B ; #E9 ¯à¨­ïâì ¡ ©â ç¥à¥§ PC_link
DB low FN_KBD_OUT ; #EA ¯®á« âì ¡ ©â ¢ ª« ¢¨ âãàã
DB low FN_RESERVED ; #EB
DB low FN_RESERVED ; #EC
DB low FN_CRIPT ; #ED
DB low RST_CONF.AY8910 ; #EE ¤«ï ᮢ¬¥á⨬®á⨠á á®ä⮬ Sp97
DB low FN_VERSION ; #EF
; Fx
DB low RST_CONF.SP97_1 ; #F0 ¤«ï ᮢ¬¥á⨬®á⨠á á®ä⮬ Sp97
DB low RST_CONF.SP97_2 ; #F1 ¤«ï ᮢ¬¥á⨬®á⨠á á®ä⮬ Sp97
DB low FN_SYNC ; #F2 ãáâ ­®¢ª  ᨭåà®­¨§ æ¨¨
DB low RST_CONF.CUSTOM ; #F3 ¤«ï ᮢ¬¥á⨬®á⨠á á®ä⮬ Sp97
DB low DCP_CONFIG ; #F4 äã­ªæ¨ï à á¯à¥¤¥«¥­¨ï ¯®à⮢ ; [x]
DB low CMOS_TEST ; #F5
DB low CMOS_RD ; #F6
DB low CMOS_WR ; #F7
DB low SET_PORTS ; #F8
DB low READ_PORTS ; #F9 [x] 26/01/2024
DB low FN_RESERVED ; #FA [x] 26/01/2024 ­¥ à ¡®â «  ¨ ­¥ ­ã¦­ , ¤ã¡«¨àã¥â SET_PORTS
DB low GOTO_SPEC ; #FB Goto Spectrum!
DB low FN_RESERVED ; #FC
DB low REINIT ; #FD
DB low FN_RESERVED ; #FE SAVE_AUTOSTART. …áâì ¢ ZX_EXP.ASM
DB low FN_VERSION ; #FF
;****************----------------------------************************-----------------
; 00 - #3F
DUP #40
DB high FN_RESERVED
EDUP
;
;--------------
DB high FN_HDD_INIT
DB high FN_HDD_RECAL
DB high FN_HDD_TEST_IDE
DB high FN_HDD_PREPARE
DB high FN_HDD_READ_BPB
DB high FN_HDD_READ
DB high FN_HDD_WRITE
DB high FN_HDD_PART
DB high FN_HDD_READ_NEXT
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
;--------------
;--------------
DB high FN_RESERVED_5x
DB high FN_5x_Parser_1
DB high FN_5x_Parser_2
DB high FN_5x_Parser_3
DB high FN_5x_Parser_4
DB high FN_5x_Parser_5
DB high FN_5x_Parser_6
DB high FN_5x_Parser_7
DB high FN_5x_Parser_8
DB high FN_5x_Parser_9
DB high DRV_VERSION
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_5x_Parser_E
DB high DRV_LIST
;--------------
; 60 - #7F
DUP #20
DB high FN_RESERVED
EDUP
; 8x
DB high LP_OPEN_S
DB high LP_PRINT_ALL
DB high LP_PRINT_SYM
DB high LP_PRINT_ATR
DB high LP_SET_PLACE
DB high LP_PRINT_LINE
DB high LP_PRINT_LINE2
DB high LP_PRINT_LINE3
DB high LP_PRINT_LINE4
DB high LP_CLS_WIN
DB high LP_SCROLL_UD
DB high LP_PRINT_LINE5
DB high LP_PRINT_LINE6
DB high LP_CLS_WIN2
DB high LP_GET_PLACE
DB high FN_TURBO
; 9x
DB high EMM.GetMemSize
DB high EMM.InitMem
DB high EMM.GetMemRMD
DB high EMM.FreeMemRMD
DB high EMM.GetMemPageRMD
DB high EMM.GetMemPageNext
DB high EMM.GetBanksPorts
DB high EMM.CheckColdInit
DB high RAMD_CALC_PAGE
DB high SET_DISK_REDIR
DB high GET_DISK_REDIR
DB high GET_RAMD_NUM
DB high SWAP_RAM_DRIVES
DB high EMM.DivMemBlocks
DB high EMM.MergeMemBlocks
DB high EMM.FullInit
; Ax
DB high PIC_FN0
DB high PIC_FN1
DB high PIC_FN2
DB high PIC_FN3
DB high PIC_SET_PAL
DB high PIC_FN5
DB high SET_PAL_INIT
DB high PIC_FN7
DB high PIC_FN8
DB high PIC_FN9
DB high PIC_FN10
DB high PIC_FN11
DB high PIC_FN12
DB high PIC_FN14
DB high PIC_FN14
DB high PIC_FN15
; Bx
DB high WIN_OPEN
DB high WIN_CLOSE
DB high WIN_COPY
DB high WIN_RESTORE
DB high WIN_GET_SYM
DB high WIN_PUT_SYM
DB high WIN_SET_ZG
DB high WIN_MOVE
DB high WIN_GET_ZG
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
; Cx
DB high EMM.GetMemSize
DB high EMM.InitMem
DB high EMM.GetMem
DB high EMM.FreeMem
DB high EMM.GetMemPage
DB high EMM.GetMemBlkPages
DB high EMM.GetBanksPorts
DB high EMM.GetMemPageNext
DB high BLK_RD_WR
DB high BLK_TO_RAMD
DB high RAMD_CLEAR
DB high RAMD_TO_DRV
DB high FDD_TO_DRV
DB high HDD_TO_DRV
DB high GET_RAMD_ST
DB high GET_DRV_ST
; Dx
DB high FN_LIB
DB high FN_LIB
DB high FN_LIB
DB high FN_LIB
DB high FN_LIB
DB high FN_LIB
DB high FN_LIB
DB high FN_LIB
DB high FN_LIB
DB high FN_LIB
DB high FN_LIB
DB high FN_LIB
DB high FN_LIB
DB high FN_LIB
DB high FN_LIB
DB high FN_LIB
; Ex
DB high LP_PR_LINE_DIR
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_SEND_BYTE
DB high FN_RESEIVE_B
DB high FN_KBD_OUT
DB high FN_RESERVED
DB high FN_RESERVED
DB high FN_CRIPT
DB high RST_CONF.AY8910
DB high FN_VERSION
; Fx
DB high RST_CONF.SP97_1
DB high RST_CONF.SP97_2
DB high FN_SYNC
DB high RST_CONF.CUSTOM
DB high DCP_CONFIG
DB high CMOS_TEST
DB high CMOS_RD
DB high CMOS_WR
DB high SET_PORTS
DB high READ_PORTS
DB high FN_RESERVED
DB high GOTO_SPEC
DB high FN_RESERVED
DB high REINIT
DB high FN_RESERVED
DB high FN_VERSION
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
;
; ,----, ,----,.
; ,/ .`| ,' ,' |
; ,` .' : ,--, ,' .' |
; ; ; / ,---, ,--.'| ,----.' .'
; .'___,/ ,' ,---.'| | | : | | .'
; | : | | | : : : ' : : |--, ,--, ,--,
; ; |.'; ; ,--.--. : : : | ' | ,---. : | ;.' \|'. \/ .`|
; `----' | | / \ : |,-.' | | / \ | | |' \/ / ;
; ' : ;.--. .-. || : ' || | : / / | `----'.'\ ; \ \.' /
; | | ' \__\/: . .| | / :' : |__ . ' / | __ \ . | \ ; ;
; ' : | ," .--.; |' : |: || | '.'|' ; /| / /\/ / : / \ \ \
; ; |.' / / ,. || | '/ :; : ;' | / | / ,,/ ',- ./__; ; \
; '---' ; : .' \ : || , / | : | \ ''\ ;| :/\ \ ;
; | , .-./ \ / ---`-' \ \ / \ \ .' `---' `--`
; `--`---' `-'----' `----' `--`-,-'
////////////////////////////////////////////////////////////////////////////////////////
_mInfoALIGN 256,0
;===========================================================[ 5x TABLE ]
; Drives Numbers:
; 0 FDD
; 1..5 reserved
; 6 RAM-DRV
; 7 reserved
; 8 HDD
; 9..B reserved
; C CDROM
; D..F reserved
TAB_5xFNS:
; --< LOW PART >--
;-------------------------------------------------------------[ FDD #0 ]
;
DB low FN_RESERVED_5x ;#50 - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FDD_5x_RESET ;#51
DB low FDD_5x_LONG_READ ;#52
DB low FDD_5x_LONG_WRITE ;#53
DB low FN_ABSENT_5x ;#54
DB low FDD_5x_READ ;#55
DB low FDD_5x_WRITE ;#56
DB low FDD_5x_DETECT ;#57
DB low FDD_5x_GETMED ;#58
DB low FDD_5x_SETMED ;#59
DB low DRV_VERSION ;#5A - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5B - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5C - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5D - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5E - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low DRV_LIST ;#5F - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
;
;---------------------------------------------------------------------[]
;-----------------------------[ #1..#5 ]
_mNoDrive_5xTable 5, 0
;-------------------------------------[]
;-------------------------------------------------------[ RAM DRIVE #6 ]
;
DB low FN_RESERVED_5x
DB low FN_ABSENT_5x
DB low RMD_5x_LONG_READ
DB low RMD_5x_LONG_WRITE
DB low FN_ABSENT_5x
DB low RMD_5x_READ
DB low RMD_5x_WRITE
DB low FN_ABSENT_5x
DB low RMD_5x_GETMED
DB low RMD_5x_SETMED
DB low DRV_VERSION
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low DRV_LIST
;---------------------------------------------------------------------[]
;---------------------------------[ #7 ]
_mNoDrive_5xTable 1, 0
;-------------------------------------[]
;-------------------------------------------------------------[ HDD #8 ]
;
DB low FN_RESERVED_5x
DB low HDD_5x_RESET
DB low HDD_5x_LONG_READ
DB low HDD_5x_LONG_WRITE
DB low HDD_5x_VERIFY
DB low HDD_5x_READ
DB low HDD_5x_WRITE
DB low HDD_5x_DETECT
DB low HDD_5x_GETMED
DB low HDD_5x_SETMED
DB low DRV_VERSION
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low DRV_LIST
;---------------------------------------------------------------------[]
;-----------------------------[ #9..#B ]
_mNoDrive_5xTable 3, 0
;-------------------------------------[]
;-----------------------------------------------------------[ CDROM #C ]
;
DB low FN_RESERVED_5x
DB low CD_5x_RESET
DB low CD_5x_LONG_READ
DB low FN_ABSENT_5x
DB low FN_ABSENT_5x
DB low CD_5x_READ
DB low FN_ABSENT_5x
DB low CD_5x_DETECT
DB low FN_ABSENT_5x
DB low FN_ABSENT_5x
DB low DRV_VERSION
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low CD_5x_Extended
DB low DRV_LIST
;---------------------------------------------------------------------[]
;-----------------------------[ #D..#F ]
_mNoDrive_5xTable 3, 0
;-------------------------------------[]
;
; --< HIGH PART >--
;-------------------------------------------------------------[ FDD #0 ]
;
DB high FN_RESERVED_5x ;#50 - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FDD_5x_RESET ;#51
DB high FDD_5x_LONG_READ ;#52
DB high FDD_5x_LONG_WRITE ;#53
DB high FN_ABSENT_5x ;#54
DB high FDD_5x_READ ;#55
DB high FDD_5x_WRITE ;#56
DB high FDD_5x_DETECT ;#57
DB high FDD_5x_GETMED ;#58
DB high FDD_5x_SETMED ;#59
DB high DRV_VERSION ;#5A - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5B - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5C - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5D - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5E - Extended functions
DB high DRV_LIST ;#5F - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
;
;---------------------------------------------------------------------[]
;-----------------------------[ #1..#5 ]
_mNoDrive_5xTable 5, 1
;-------------------------------------[]
;-------------------------------------------------------[ RAM DRIVE #6 ]
;
DB high FN_RESERVED_5x
DB high FN_ABSENT_5x
DB high RMD_5x_LONG_READ
DB high RMD_5x_LONG_WRITE
DB high FN_ABSENT_5x
DB high RMD_5x_READ
DB high RMD_5x_WRITE
DB high FN_ABSENT_5x
DB high RMD_5x_GETMED
DB high RMD_5x_SETMED
DB high DRV_VERSION
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high DRV_LIST
;---------------------------------------------------------------------[]
;---------------------------------[ #7 ]
_mNoDrive_5xTable 1, 1
;-------------------------------------[]
;-------------------------------------------------------------[ HDD #8 ]
;
DB high FN_RESERVED_5x
DB high HDD_5x_RESET
DB high HDD_5x_LONG_READ
DB high HDD_5x_LONG_WRITE
DB high HDD_5x_VERIFY
DB high HDD_5x_READ
DB high HDD_5x_WRITE
DB high HDD_5x_DETECT
DB high HDD_5x_GETMED
DB high HDD_5x_SETMED
DB high DRV_VERSION
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high DRV_LIST
;---------------------------------------------------------------------[]
;-----------------------------[ #9..#B ]
_mNoDrive_5xTable 3, 1
;-------------------------------------[]
;----------------------------------------------------------[ CDROM #C0 ]
;
DB high FN_RESERVED_5x
DB high CD_5x_RESET
DB high CD_5x_LONG_READ
DB high FN_ABSENT_5x
DB high FN_ABSENT_5x
DB high CD_5x_READ
DB high FN_ABSENT_5x
DB high CD_5x_DETECT
DB high FN_ABSENT_5x
DB high FN_ABSENT_5x
DB high DRV_VERSION
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high CD_5x_Extended
DB high DRV_LIST
;---------------------------------------------------------------------[]
;-----------------------------[ #D..#F ]
_mNoDrive_5xTable 3, 1
;-------------------------------------[]
;======================================================================;
;************************************
; ‚室 ¢ äã­ªæ¨î ¯® RST18 ¨ RST8
EXP_FNS_RST18:
PUSH HL
LD L,C
LD H,high TAB_FNS
LD C,(HL)
INC H
LD H,(HL)
LD L,C
EX (SP),HL
RET
FN_5x_Parser_1:
LD C,#01
JP FN_5x_Parser
FN_5x_Parser_2:
LD C,#02
JP FN_5x_Parser
FN_5x_Parser_3:
LD C,#03
JP FN_5x_Parser
FN_5x_Parser_4:
LD C,#04
JP FN_5x_Parser
FN_5x_Parser_6:
LD C,#06
JP FN_5x_Parser
FN_5x_Parser_7:
LD C,#07
JP FN_5x_Parser
FN_5x_Parser_8:
LD C,#08
JP FN_5x_Parser
FN_5x_Parser_9:
LD C,#09
JP FN_5x_Parser
FN_5x_Parser_E:
LD C,#0E
JP FN_5x_Parser
FN_5x_Parser_5:
LD C,5
FN_5x_Parser:
PUSH HL
LD H,A
AND #F0
OR C
; âãâ ¢ A ­®¬¥à “<E28098>މ€ + <20>ŽŒ…<C592> ”“<E2809D>Šˆˆ
LD L,A
LD A,H
LD H,high TAB_5xFNS
LD C,(HL)
INC H
LD H,(HL)
LD L,C
EX (SP),HL
RET
; ‚室 ¢ ä㭪樨 <20>ˆŽ ¨§ TR-DOS
EXP_FNS:; ®âª«îç ¥¬ § ¯¨áì ¢ íªà ­ ᯥªâà㬠
;EX (SP),HL
;IN A,(RGADR)
;LD L,A
;LD A,#C0
;OUT (PORT_Y),A
;LD A,H
;EX (SP),HL ; (SP) = port_y
POP AF
;
CALL EXP_FNS_RST18
CALL DOS_ON
; ¢®§¢à é ¥¬ § ¯¨áì ¢ íªà ­ ᯥªâà㬠
;EX (SP),HL
;PUSH AF
;LD A,L
;OUT (RGADR),A
;POP AF
;POP HL
; ¢®§¢à â
JP EXP_FNS_RET
;! ! ! ! ! ! ! !
FN_RESERVED_5x:
LD A,1 ;!HARDCODE error code
FN_RESERVED:
SCF
RET
FN_ABSENT_5x:
LD A,#AA ;!HARDCODE error code
SCF
RET
;! ! ! ! ! ! ! !
;

670
Crazy BIOS/exp/DCP.ASM Normal file
View File

@ -0,0 +1,670 @@
;-----------------------------------------------------------------------;
; DATA FOR DCP
; ˘ˇ¨˘ Ą¬ ˘ â ˇ«¨ćă DCP.XLSX ­ă¦­ë© ˘­Ąč­¨© Ż®ŕâ,
; ᬮâਬ ᬥ饭¨Ą ¤«ď OUT (),x - íâ®  ¤ŕĄá
;
;
; C C E D / A A A A A A A A A
; N N 1 O W 1 1 6 5 1 7 2 1 0
; F F 2 S R 5 4 3
; 1 0 8
;
; CCED/AAAAAAAAA
; NN1OW116517210
; FF2SR54 3
;DCP_DATA: 108
; ....0..11.1110
; WORD %00000001101110 ; -  ¤ŕĄá
; WORD %00001001101111 ; - ¬ áŞ  - 0 ¨§¬Ą­ďĄ¬ëĄ ˇ¨âë, 1 ­Ą¨§¬Ą­ďĄ¬ëĄ
; BYTE ACEX.Border_FE ; - Ż®ŕâ
; DCP END MARKER
; DW 0,0,0
;-----------------------------------------------------------------------;
;
;
;-----------------------------------------------------------------------;
DW %00'000'0'0000'0111
DW %00'010'0'0110'1111
DB ACEX.VG93_1F
DW %11'010'0'0000'0111
DW %11'010'0'0110'1111
DB ACEX.VG93_1F
DW %00'000'0'0010'0111
DW %00'010'0'0110'1111
DB ACEX.VG93_3F
DW %11'010'0'0010'0111
DW %11'010'0'0110'1111
DB ACEX.VG93_3F
DW %00'000'0'0100'0111
DW %00'010'0'0110'1111
DB ACEX.VG93_5F
DW %11'010'0'0100'0111
DW %11'010'0'0110'1111
DB ACEX.VG93_5F
DW %00'000'0'0110'0111
DW %00'010'0'0110'1111
DB ACEX.VG93_7F
DW %11'010'0'0110'0111
DW %11'010'0'0110'1111
DB ACEX.VG93_7F
DW %00'000'0'0110'1111
DW %00'011'0'0110'1111
DB ACEX.VG93_State
DW %11'010'0'0110'1111
DW %11'011'0'0110'1111
DB ACEX.VG93_State
; For joystick
DW %00'011'0'0000'0111
DW %10'011'0'0110'1111
DB ACEX.JOY_VG93
DW %10'011'0'0000'0111
DW %11'011'0'0110'1111
DB ACEX.JOY_VG93
; For VG93 with dos on
DW %00'001'0'0110'1111
DW %00'011'0'0110'1111
DB ACEX.JOY_VG93
; For VG93 with dos off
DW %11'011'0'0110'1111
DW %11'011'0'0110'1111
DB ACEX.JOY_VG93
DW %00'000'0'0010'1101
DW %11'011'1'1111'1111
DB ACEX.FDD720
DW %11'000'0'0010'1101
DW %11'001'1'1111'1111
DB ACEX.FDD720
DW %00'000'0'0011'1101
DW %11'011'1'1111'1111
DB ACEX.FDD144
DW %11'000'0'0011'1101
DW %11'001'1'1111'1111
DB ACEX.FDD144
;!FIXIT UNKNOWN PORTS ( Z84? ) ----------------------------------------; dos on, ⮫쪮 çĄŕĄ§ BC, ç⥭¨Ą/§ Ż¨áě
DW %10'000'1'0010'1101
DW %11'010'1'1111'1111
DB #18
DW %10'000'1'0011'1101
DW %11'010'1'1111'1111
DB #19
DW %10'000'1'1010'1101
DW %11'010'1'1111'1111
DB #1A
;----------------------------------------------------------------------;
DW %00'000'1'0010'1101
DW %11'001'1'1111'1111
DB ACEX.ISA_CTRL
DW %10'000'1'1011'1101
DW %11'010'1'1111'1111
DB ACEX.ISA_CTRL
DW %11'000'1'0010'1101
DW %11'001'1'1111'1111
DB ACEX.ISA_CTRL
DW %00'001'1'0011'1101
DW %11'001'1'0111'1111
DB ACEX.CMOS_DATA.READ
DW %11'001'1'0011'1101
DW %11'001'1'0111'1111
DB ACEX.CMOS_DATA.READ
DW %00'000'1'1010'1101
DW %11'001'1'1111'1111
DB ACEX.CMOS_ADDR.WRITE
DW %11'000'1'1010'1101
DW %11'001'1'1111'1111
DB ACEX.CMOS_ADDR.WRITE
DW %00'000'1'0011'1101
DW %11'001'1'0111'1111
DB ACEX.CMOS_DATA.WRITE
DW %11'000'1'0011'1101
DW %11'001'1'0111'1111
DB ACEX.CMOS_DATA.WRITE
;
;---------HDD[v]
DW %00'000'0'0100'0000
DW %11'000'0'0110'1111
DB ACEX.IDE_DATA_1F0
DW %01'000'0'0100'0000
DW %11'010'0'0110'1111
DB ACEX.IDE_DATA_1F0
DW %10'000'0'0100'0000
DW %11'010'0'0110'1111
DB ACEX.IDE_DATA_1F0
DW %11'000'0'0100'0000
DW %11'000'0'0110'1111
DB ACEX.IDE_DATA_1F0
DW %00'000'0'0100'0001
DW %00'010'1'1110'1111
DB ACEX.IDE_ERROR_1F1
DW %00'010'0'0100'0001
DW %11'010'1'1110'1111
DB ACEX.IDE_ERROR_1F1
DW %11'010'0'0100'0001
DW %11'010'1'1110'1111
DB ACEX.IDE_ERROR_1F1
DW %00'000'0'0100'0010
DW %00'010'1'1110'1111
DB ACEX.IDE_COUNTER_1F2
DW %00'010'0'0100'0010
DW %11'010'1'1110'1111
DB ACEX.IDE_COUNTER_1F2
DW %11'010'0'0100'0010
DW %11'010'1'1110'1111
DB ACEX.IDE_COUNTER_1F2
DW %00'000'0'0100'0011
DW %00'010'1'1110'1111
DB ACEX.IDE_SECTOR_1F3
DW %00'010'0'0100'0011
DW %11'010'1'1110'1111
DB ACEX.IDE_SECTOR_1F3
DW %11'010'0'0100'0011
DW %11'010'1'1110'1111
DB ACEX.IDE_SECTOR_1F3
DW %00'000'0'0100'0100
DW %00'010'1'1110'1111
DB ACEX.IDE_CYLINDER_L_1F4
DW %00'010'0'0100'0100
DW %11'010'1'1110'1111
DB ACEX.IDE_CYLINDER_L_1F4
DW %11'010'0'0100'0100
DW %11'010'1'1110'1111
DB ACEX.IDE_CYLINDER_L_1F4
DW %00'000'0'0100'0101
DW %00'010'1'1110'1111
DB ACEX.IDE_CYLINDER_H_1F5
DW %00'010'0'0100'0101
DW %11'010'1'1110'1111
DB ACEX.IDE_CYLINDER_H_1F5
DW %11'010'0'0100'0101
DW %11'010'1'1110'1111
DB ACEX.IDE_CYLINDER_H_1F5
DW %00'000'0'1100'0010
DW %00'010'1'1110'1111
DB ACEX.IDE_DEVICE_HEAD_1F6
DW %00'010'0'1100'0010
DW %11'010'1'1110'1111
DB ACEX.IDE_DEVICE_HEAD_1F6
DW %11'010'0'1100'0010
DW %11'010'1'1110'1111
DB ACEX.IDE_DEVICE_HEAD_1F6
DW %00'000'0'1100'0011
DW %00'010'1'1110'1111
DB ACEX.IDE_STATUS_CMD_1F7
DW %00'010'0'1100'0011
DW %11'010'1'1110'1111
DB ACEX.IDE_STATUS_CMD_1F7
DW %11'010'0'1100'0011
DW %11'010'1'1110'1111
DB ACEX.IDE_STATUS_CMD_1F7
;---------HDD[^]
;
DW %00'000'0'1100'0100
DW %00'010'1'1110'1111
DB ACEX.IDE_CONTROL_3F6
DW %00'010'0'1100'0100
DW %11'010'1'1110'1111
DB ACEX.IDE_CONTROL_3F6
DW %11'010'0'1100'0100
DW %11'010'1'1110'1111
DB ACEX.IDE_CONTROL_3F6
DW %00'000'0'1100'0101
DW %00'010'1'1110'1111
DB ACEX.IDE_STATUS_3F7
DW %00'010'0'1100'0101
DW %11'010'1'1110'1111
DB ACEX.IDE_STATUS_3F7
DW %11'010'0'1100'0101
DW %11'010'1'1110'1111
DB ACEX.IDE_STATUS_3F7
DW %00'000'0'0010'1100
DW %11'001'1'1111'1111
DB ACEX.IDE_CHANEL_1
DW %11'000'0'0010'1100
DW %11'001'1'1111'1111
DB ACEX.IDE_CHANEL_1
DW %00'000'0'0011'1100
DW %11'001'1'1111'1111
DB ACEX.IDE_CHANEL_2
DW %11'000'0'0011'1100
DW %11'001'1'1111'1111
DB ACEX.IDE_CHANEL_2
DW %00'000'0'1010'1101
DW %11'001'1'1111'1111
DB ACEX.VSYNC320
DW %11'000'0'1010'1101
DW %11'001'1'1111'1111
DB ACEX.VSYNC320
DW %00'000'0'1011'1101
DW %11'001'1'1111'1111
DB ACEX.VSYNC312
DW %11'000'0'1011'1101
DW %11'001'1'1111'1111
DB ACEX.VSYNC312
DW %00'000'0'1010'1100
DW %11'001'1'1111'1111
DB ACEX.RESET
DW %11'000'0'1010'1100
DW %11'001'1'1111'1111
DB ACEX.RESET
DW %00'000'0'1011'1100
DW %11'001'1'1111'1111
DB ACEX.UNKNOWN ;!FIXIT ¬®¦­® Ż®Ş  ăˇŕ âě
DW %11'000'0'1011'1100
DW %11'001'1'1111'1111
DB ACEX.UNKNOWN ;!FIXIT ¬®¦­® Ż®Ş  ăˇŕ âě
DW %00'010'0'0010'1011
DW %11'010'0'0110'1011
DB ACEX.ISA_Control
DW %00'011'0'0110'1110
DW %10'011'0'0110'1111
DB ACEX.ZX_Keyboard
DW %10'011'0'0110'1110
DW %11'011'0'0110'1111
DB ACEX.ZX_Keyboard
DW %00'001'1'1111'1101
DW %00'001'1'1111'1111
DB ACEX.AY_FFFD_READ
DW %00'001'1'1101'1111
DW %11'001'1'1111'1111
DB ACEX.Kempston_Mouse
DW %11'001'1'1101'1111
DW %11'001'1'1111'1111
DB ACEX.Kempston_Mouse
DW %00'011'0'0110'0011
DW %11'011'0'0110'1111
DB ACEX.CBL_OUT
DW %01'010'0'0110'0011
DW %11'010'0'0110'1111
DB ACEX.CBL_OUT
DW %10'010'0'0110'0011
DW %11'010'0'0110'1111
DB ACEX.CBL_OUT
DW %00'010'0'0000'0111
DW %11'011'0'0000'1111
DB ACEX.CBL_OUT
DW %00'011'0'0000'1000
DW %11'011'0'0110'1111
DB ACEX.CBL_OUT
DW %00'010'0'0110'1011
DW %10'010'0'0110'1111
DB ACEX.CBL_OUT
DW %10'010'0'0110'1011
DW %11'010'0'0110'1111
DB ACEX.CBL_OUT
DW %00'000'0'0100'0110
DW %11'001'1'1111'1111
DB ACEX.CBL_SYS_PORT
DW %11'000'0'0100'0110
DW %11'001'1'1111'1111
DB ACEX.CBL_SYS_PORT
DW %00'000'1'1111'1101
DW %00'001'1'1111'1111
DB ACEX.AY_FFFD_WRITE
DW %00'000'1'0111'1101
DW %00'001'1'1111'1111
DB ACEX.AY_BFFD
DW %00'000'0'0110'1101
DW %10'000'1'1111'1111
DB ACEX.Scorp_1FFD
DW %11'000'0'0110'1101
DW %11'000'1'1111'1111
DB ACEX.Scorp_1FFD
DW %00'000'0'1110'1101
DW %00'100'1'1110'1111
DB ACEX.Pent_7FFD
DW %00'100'0'1110'1101
DW %11'110'1'1110'1111
DB ACEX.Pent_7FFD
DW %11'100'0'1110'1101
DW %11'100'1'1110'1111
DB ACEX.Pent_7FFD
DW %10'000'0'0110'1101
DW %11'100'1'1110'1111
DB ACEX.Pent_7FFD
DW %00'000'0'0110'1110
DW %00'001'0'0110'1111
DB ACEX.Border_FE
DW %00'000'0'0101'0110
DW %11'001'1'1111'1111
DB ACEX.ALL_MODE
DW %11'000'0'0101'0110
DW %11'001'1'1111'1111
DB ACEX.ALL_MODE
DW %00'000'0'0000'1001
DW %00'010'0'0110'1111
DB ACEX.PORT_Y
DW %00'010'0'0000'1001
DW %11'010'0'0110'1111
DB ACEX.PORT_Y
DW %11'010'0'0000'1001
DW %11'010'0'0110'1111
DB ACEX.PORT_Y
DW %00'000'0'0100'1001
DW %00'010'0'0110'1111
DB ACEX.RGMOD
DW %00'010'0'0100'1001
DW %11'010'0'0110'1111
DB ACEX.RGMOD
DW %11'010'0'0100'1001
DW %11'010'0'0110'1111
DB ACEX.RGMOD
DW %00'000'0'0010'0100
DW %00'000'0'0010'1111
DB ACEX.CNF_PORT
DW %00'000'0'0110'1100
DW %11'001'0'0110'1111
DB ACEX.SCALE
DW %11'000'0'0110'1100
DW %11'001'0'0110'1111
DB ACEX.SCALE
DW %00'000'0'0000'1010
DW %00'010'0'0110'1111
DB ACEX.SLOT0
DW %00'010'0'0000'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT0
DW %11'010'0'0000'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT0
DW %00'000'0'0010'1010
DW %00'010'0'0110'1111
DB ACEX.SLOT1
DW %00'010'0'0010'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT1
DW %11'010'0'0010'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT1
DW %00'000'0'0100'1010
DW %00'010'0'0110'1111
DB ACEX.SLOT2
DW %00'010'0'0100'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT2
DW %11'010'0'0100'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT2
DW %00'000'0'0110'1010
DW %00'010'0'0110'1111
DB ACEX.SLOT3
DW %00'010'0'0110'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT3
DW %11'010'0'0110'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT3
; DCP END MARKER
DW 0,0,0
;-----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
DCP_INIT:
LD C,XL
LD B,XH
LD E,YL
LD D,YH
EXX
LD HL,#C000
LD DE,#C001
LD BC,#3FFF
LD (HL),L
LDIR
LD IY,DCP_DATA
LD IX,.ret
.loop: LD L,(IY)
LD H,(IY+1)
LD E,(IY+2)
LD D,(IY+3)
LD B,(IY+4)
JP DCP_CONFIG.PARSE_TABLE
.ret: LD BC,5
ADD IY,BC
LD A,(IY+2)
OR (IY+3)
JR NZ,.loop
EXX
LD XL,C
LD XH,B
LD YL,E
LD YH,D
; First IN command - OPEN DCP
IN A,(SLOT3)
JP (HL)
;-----------------------------------------------------------------------;
;
;
;-----------------------------------------------------------------------;
; ”ă­Şć¨ď ¤Ąč¨äŕ â®ŕ  Ż®ŕ⮢.
; HL -  ¤ŕĄá
; DE - ¬ áŞ  - 0 ¨§¬Ą­ďĄ¬ëĄ ˇ¨âë, 1 ­Ą¨§¬Ą­ďĄ¬ëĄ
; B - Ż®ŕâ
;
DCP_CONFIG:
AND A
JP Z,PORTS_INIT
LD A,R
DI
PUSH AF
PUSH IX
LD IX,.exit
IN A,(SLOT3)
EX AF,AF'
LD A,DCP_PAGE
OUT (SLOT3),A
JR .PARSE_TABLE
.exit: EX AF,AF'
OUT (SLOT3),A
AND A
POP IX
POP AF
RET PO
EI
RET
.PARSE_TABLE:
LD A,L
AND E
LD L,A
LD A,H
AND D
OR #C0
LD H,A
LD A,D
OR #C0
LD D,A
.loop: LD (HL),B
LD A,L ; § ¬ áŞ¨ŕ®˘ âě ­Ą¨§¬Ą­ďĄ¬ëĄ ˇ¨âë 1-¬¨
OR E ; ¤«ď Żŕ®ĺ®¦¤Ą­¨ď ŻĄŕĄ­®á 
INC A ; 㢥«¨ç¨âě  ¤ŕĄá
JR Z,.carry ; ˘®§­¨Ş ŻĄŕĄ­®á
OR E
XOR E ; ®ˇ­ă«¨âě ­Ą¨§¬Ą­ďĄ¬ëĄ ˇ¨âë
LD C,A ; ¨§¬Ą­ďĄ¬ ď ç áâě
LD A,L
AND E ; ˘ë¤Ą«¨âě ­Ą¨§¬Ą­ďĄ¬ăî
OR C
LD L,A ; ¤®ˇ ˘¨âě ¨§¬Ą­ďĄ¬ăî ç áâě
JR .loop ; 横«
; A = 0
.carry: LD A,L ; § ˇ¨âě ¨§¬Ą­ďĄ¬ëĄ ˇ¨âë ­ă«ď¬¨
AND E
LD L,A
LD A,H ; § ¬ áŞ¨ŕ®˘ âě ­Ą¨§¬Ą­ďĄ¬ëĄ ˇ¨âë 1-¬¨
OR D ; ¤«ď Żŕ®ĺ®¦¤Ą­¨ď ŻĄŕĄ­®á 
INC A ; 㢥«¨ç¨âě  ¤ŕĄá
JR Z,.return
OR D
XOR D
LD C,A ; ¨§¬Ą­ďĄ¬ ď ç áâě
LD A,H
AND D ; ˘ë¤Ą«¨âě ­Ą¨§¬Ą­ďĄ¬ăî
OR C
LD H,A ; ¤®ˇ ˘¨âě ¨§¬Ą­ďĄ¬ăî ç áâě
JR .loop
.return: JP (IX)
;-----------------------------------------------------------------------;
;
;----------------------------------------------------------------------;
;[x] 26/01/2024
READ_PORTS:
CALL SET_PORTS.Prepare
LD BC,0
IN B,(C)
JR SET_PORTS.End
;[x] 26/01/2024
; WRITE_PORTS:
; SCF
; RET
;----------------------------------------------------------------------;
;
;-----------------------------------------------------------------------;
;[x] ’ĄŻĄŕě íâ® ­Ą ­ă¦­®: CALL from 3D13h! Žáâ®ŕ®¦­ĄĄ á ŻŕĄŕ뢠­¨ď¬¨, «ăçčĄ Ł á¨âě, ç⮡ ­Ą ᡨâě ᨣ­ « DOS_ON
; in: A - ˘­ăâ७­¨© Ż®ŕâ, B - §­ çĄ­¨Ą ¤«ď § Ż¨á¨ ˘® ˘­ăâ७­¨© Ż®ŕâ
; out: B - áâ ŕ®Ą §­ çĄ­¨Ą ˘­ăâ७­ĄŁ® Ż®ŕâ ; ŹĄŕĄ¤ ˘ë室®¬ ˘®ááâ ­ ˘«¨˘ Ąâáď Ş®­ä  Żŕ®Ż¨á ­­ ď ˘ CONFIG_DE.
SET_PORTS:
CALL .Prepare
;
EX AF,AF'
LD A,B
LD BC,0
EX AF,AF'
;
; —⥭¨Ą Ż®ŕâ 
IN A,(C)
; ‡ Ż¨áě Ż®ŕâ 
EX AF,AF'
OUT (C),A ; ăáâ ­®˘¨âě ­®˘®Ą §­ çĄ­¨Ą Ż®ŕâ 
EX AF,AF'
;
LD B,A ; Żŕ®č«®Ą á®áâ®ď­¨Ą Ż®ŕâ 
;
.End: LD A,DCP_PAGE ; ăáâ ­®˘¨âě DCP
LD C,SLOT2
OUT (C),A
LD A,L
LD (#8000),A ; ˘Ąŕ­ăâě Ż®ŕâ
LD A,H
LD (#8200),A ; ˘Ąŕ­ăâě Ż®ŕâ
;
LD A,SYS_PAGE
OUT (C),A
LD A,(SYS_PAGE.CONFIG_DE-#4000)
OUT (C),D ; ˘Ąŕ­ăâě áâŕ ­¨ćă
OUT (SYS_PORT.ROM),A
;
CALL DOS_OFF
;
;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23
BIT 2,E
RET Z
EI
RET
;AND A
;RET
;
.Prepare:
EX AF,AF'
;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23
AND A
LD A,R
PUSH AF
POP DE
DI
CALL DOS_ON
;
LD A,CNF_PORT.CNF_0 + ROM.BIOS
OUT (SYS_PORT.ROM),A
;
LD C,SLOT2 ; Ż®«ăç¨âě áâŕ ­¨ćă
IN D,(C)
;
LD A,DCP_PAGE ; ăáâ ­®˘¨âě ­®˘ăî
OUT (C),A
;
LD A,(#8000) ; á®ĺŕ ­¨âě â® çâ® ˇë«®
LD L,A
LD A,(#8200)
LD H,A
EX AF,AF' ; áâŕ ­¨ć 
;
LD (#8000),A ; ăáâ ­®˘¨âě ˘­ăâ७­¨© Ż®ŕâ
LD (#8200),A
OUT (C),D ; ˘Ąŕ­ăâě áâŕ ­¨ćă
RET
;-----------------------------------------------------------------------;
;

1833
Crazy BIOS/exp/EXP.asm Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,847 @@
; !FIXIT ALL
;
;[]===========================================================[]
; FDD.CHANGE:
; LD A,#01
; AND A
; RET
;[]===========================================================[]
;Function: Get Current Media Parameters
; A - Disk
;Return:
; H - Heads
; L - Sectors
; DE - Cylinders
; IX - Capacity sector in bytes
; B - Flags
; D7 - "1" - High Density, "0" - Double Density
;[]===========================================================[]
;!FIXIT ¢á¥£¤  ¨¤¥â à ¡®â  á ¤ ­­ë¬¨ ¤«ï ¤¨áª  €
FDD_5x_GETMED:
;!TEST FDD 720/1440
IF FDD_NormalCount
LD IY,FDD_INI_TABLE.FDD_0
DEC A
JR C,.getParams
LD IY,FDD_INI_TABLE.FDD_1
.getParams:
ENDIF
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
;!TEST FDD 720/1440
IF FDD_NormalCount
LD L,(IY+1) ;SECTORS
LD H,(IY+2) ;HEADS
LD E,(IY+3) ;CYLINDL
LD D,(IY+4) ;CYLINDH
LD A,(IY+5) ;B_P_S low
LD XL,A
LD A,(IY+6) ;B_P_S High
LD XH,A
LD A,(IY+0) ;F144/720
ELSE
LD HL,(FDD_INI_TABLE.FDD_0.SECTORS)
LD DE,(FDD_INI_TABLE.FDD_0.CYLINDL)
LD IX,(FDD_INI_TABLE.FDD_0.BytesPerSector)
LD A,(FDD_INI_TABLE.FDD_0.F144)
ENDIF
LD B,A
EX AF,AF'
OUT (SLOT3),A
;EX AF,AF'
AND A
RET
;[]===========================================================[]
;Function: Set Current Media Parameters
; A - Disk
; H - Heads
; L - Sectors
; DE - Cylinders
; IX - Capacity sector in bytes
; B - Flags
; D7 - "1" - High Density, "0" - Double Density
;Return: None
;[]===========================================================[]
FDD_5x_SETMED: ;!TEST FDD 720/1440
IF FDD_NormalCount
LD IY,FDD_INI_TABLE.FDD_0
DEC A
JR C,.setParams
LD IY,FDD_INI_TABLE.FDD_1
ENDIF
;
.setParams: IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
;
;!TEST FDD 720/1440
IF FDD_NormalCount
LD (IY+1),L ;SECTORS
LD (IY+2),H ;HEADS
LD (IY+3),E ;CYLINDL
LD (IY+4),D ;CYLINDH
LD A,XL
LD (IY+5),A ;B_P_S low
LD A,XH
LD (IY+6),A ;B_P_S High
LD (IY+0),B ;F144/720
LD A,B
ELSE
LD A,B
LD (FDD_INI_TABLE.FDD_0.SECTORS),HL
LD (FDD_INI_TABLE.FDD_0.CYLINDL),DE
LD (FDD_INI_TABLE.FDD_0.BytesPerSector),IX
LD (FDD_INI_TABLE.FDD_0.F144),A
ENDIF
;
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
;
;!TEST FDD 720/1440
IF FDD_NormalCount
AND 1
JP Z,FN_TURBO.SET_FDD_720
JP FN_TURBO..SET_FDD_1440
ELSE
AND A
RET
ENDIF
;[]===========================================================[]
;Function: Detect Disk Density
; A - Disk
;Return:
; A - Flag D7 - "1" - High Density, "0" - Double Density
;[]===========================================================[]
FDD_5x_DETECT: CALL SAVE_INTERRUPTS.switch_off
CALL SET_DOS_ON
CALL DISK_ID
PUSH AF
CALL SET_DOS_OFF
POP AF
JP SAVE_INTERRUPTS.restore
;RET
;[]===========================================================[]
;Function: Reset Disk
; A - Disk
;Return: None
;[]===========================================================[]
FDD_5x_RESET: CALL SAVE_INTERRUPTS.switch_off
CALL SET_DOS_ON
CALL S_FDD
CALL DISK_ID
JR C,.MOTOR_OFF
;
CALL RESWG
XOR A
OUT (FDC_93.Track),A
IN A,(FDC_93.Command)
;LD C,A
CALL SET_DOS_OFF
;LD A,C
AND A
JP SAVE_INTERRUPTS.restore
;RET
.MOTOR_OFF: ;PUSH AF
LD A,#D0
OUT (FDC_93.Command),A ;STOP OPERATION
LD A,#00
OUT (FDC_93.DrvCTRL),A
LD A,#3C
OUT (FDC_93.DrvCTRL),A
CALL SET_DOS_OFF
; CF=1
LD A,BIOS.Error.NotReady
;POP AF
JP SAVE_INTERRUPTS.restore
;[]===========================================================[]
;Function: Read Sectors
; A - Disk
; HL:IX - Sector
; DE - Address
; B - Sector counter
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
;[]===========================================================[]
FDD_5x_READ:
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'
;[]===========================================================[]
;Function: Long Read Sectors
; A - Disk
; HL:IX - Sector
; DE - Address
; B - Sector counter
; A'- Memory Page Number
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
;[]===========================================================[]
FDD_5x_LONG_READ:
CALL SAVE_INTERRUPTS.switch_off
CALL .Start
JP SAVE_INTERRUPTS.restore
;
.Start: PUSH IY
PUSH BC
PUSH HL
PUSH IX
EX AF,AF'
LD C,A
EX AF,AF'
PUSH BC
CALL SET_DOS_ON
CALL S_FDD
CALL SET_SPEED
CALL NTRACK
POP BC
EX DE,HL
; LD A,B
; OR A
; JP Z,RETDOS
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD IY,(FDD_INI_TABLE.FDD_0.BytesPerSector)
LD XH,C
LD A,(FDD_INI_TABLE.FDD_0.SECTORS)
LD C,A
EX AF,AF'
OUT (SLOT3),A
.DSK_LP: LD A,D
EXX
CALL SEEK
EXX
PUSH DE
PUSH BC
PUSH HL
CALL READ_SECTOR
JR C,ERRDOS
LD D,YH
LD E,YL
POP HL
POP BC
ADD HL,DE
JR NC,.THISRD
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD D,#C2
LD E,XH
LD A,(DE)
LD XH,A
EX AF,AF'
OUT (SLOT3),A
SET 7,H
SET 6,H
.THISRD: POP DE
LD A,C
INC E
CP E
JR NZ,.NINC_T
LD E,0
INC D
.NINC_T: DJNZ .DSK_LP
.RETDOS: CALL SET_DOS_OFF
LD A,XH
EX AF,AF'
EX DE,HL
POP IX
POP HL
POP BC
POP IY
LD A,B
LD C,B
INC B
DEC B
LD B,0
JR NZ,.ADD8BIT
INC B
.ADD8BIT: ADD IX,BC
LD BC,0
ADC HL,BC
LD B,A
XOR A
RET
;
ERRDOS: POP HL
POP BC
POP DE
CALL SET_DOS_OFF
EX DE,HL
EX AF,AF'
EXX
LD C,XH
EXX
LD A,B
POP IX
POP HL
POP BC
POP IY
PUSH AF
LD C,A
LD A,B
SUB C
LD C,A
LD B,0
ADD IX,BC
LD C,B
ADC HL,BC
POP BC
EXX
LD A,C
EXX
EX AF,AF'
SCF
RET
;[]===========================================================[]
;Function: Write Sectors
; A - Disk
; HL:IX - Sector
; DE - Address
; B - Sector counter
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
;[]===========================================================[]
FDD_5x_WRITE:
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'
;[]===========================================================[]
;Function: Long Write Sectors
; A - Disk
; HL:IX - Sector
; DE - Address
; B - Sector counter
; A'- Memory Page Number
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
;[]===========================================================[]
FDD_5x_LONG_WRITE:
CALL SAVE_INTERRUPTS.switch_off
CALL .Start
JP SAVE_INTERRUPTS.restore
;
.Start: PUSH IY
PUSH BC
PUSH HL
PUSH IX
EX AF,AF'
LD C,A
EX AF,AF'
PUSH BC
CALL SET_DOS_ON
CALL S_FDD
CALL SET_SPEED
CALL NTRACK
POP BC
EX DE,HL
; LD A,B
; OR A
; JP Z,RETDOS
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD IY,(FDD_INI_TABLE.FDD_0.BytesPerSector)
LD XH,C
LD A,(FDD_INI_TABLE.FDD_0.SECTORS)
LD C,A
EX AF,AF'
OUT (SLOT3),A
.DSK_LP2: LD A,D
EXX
CALL SEEK
EXX
PUSH DE
PUSH BC
PUSH HL
CALL WR_SEC
JR C,ERRDOS
LD D,YH
LD E,YL
POP HL
POP BC
ADD HL,DE
JR NC,.THISWR
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD D,#C2
LD E,XH
LD A,(DE)
LD XH,A
EX AF,AF'
OUT (SLOT3),A
SET 7,H
SET 6,H
.THISWR: POP DE
LD A,C
INC E
CP E
JR NZ,.NINC_T2
LD E,0
INC D
.NINC_T2: DJNZ .DSK_LP2
CALL SET_DOS_OFF
LD A,XH
EX AF,AF'
EX DE,HL
POP IX
POP HL
POP BC
POP IY
LD A,B
LD C,B
INC B
DEC B
LD B,0
JR NZ,.ADW8BIT
INC B
.ADW8BIT: ADD IX,BC
LD BC,0
ADC HL,BC
LD B,A
XOR A
RET
;
;-------------------------------
;READ SECTOR
;-------------------------------
READ_SECTOR: LD D,5 ;RETRY COUNT
.RRETRY: ;DI
PUSH DE
LD A,E
INC A
OUT (FDC_93.Sector),A
.FDREAD: IN A,(SLOT3)
EX AF,AF'
LD A,XH
OUT (SLOT3),A
;
LD B,4 ; áçñâ稪
LD C,FDC_93.Data
LD A,#80 ;!HARDCODE COMMAND READ
OUT (FDC_93.Command),A
.FDR001: IN A,(FDC_93.DrvCTRL) ;WAIT INTRQ or DRQ
AND #C0
JR NZ,.FDR004
INC DE
LD A,E
OR D
JR NZ,.FDR001
DJNZ .FDR001
SCF
JR .FDR005
;
.FDR004: INI ;READ BYTE
.FDR002: IN A,(FDC_93.DrvCTRL)
AND #C0
JR Z,.FDR002
JP P,.FDR004
.FDR005: EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
;
POP DE
;EI
IN A,(FDC_93.Command)
LD C,A
;R01 ; JP C,ERRRD ;READ ERROR
; [x] 29/06/2024
;JP C,.ERR_XRD
JR NC,.NO_ERR_XRD
DEC D
JR Z,.RSTOP
JR .RRETRY
;
.NO_ERR_XRD: ;
AND #7F
RET Z
BIT 2,C
JR NZ,.ERDATA
LD A,BIOS.Error.Seek
DEC D
JR Z,.RSTOP
PUSH DE
CALL RESWG ; RESET_WG
LD A,XL
CALL SEEK ; !!!!! ¯®á¬®âà¥âì
.ERR_XRD: POP DE
JR .RRETRY
;
.ERDATA: DEC D ; POTERIA DANNYH
JR NZ,.RRETRY
.ERRRD: LD A,BIOS.Error.Read
.RSTOP: EX AF,AF'
LD A,#D0
OUT (FDC_93.Command),A ;STOP OPERATION
EX AF,AF'
BIT 0,C
SCF
RET Z
LD A,BIOS.Error.SectorNotFound
RET
; ; ;
;
;-------------------------------
;WRITE SECTOR
;-------------------------------
WR_SEC: LD D,5 ;RETRY COUNT
.WRETRY:
;DI
PUSH DE
LD A,E
INC A
OUT (FDC_93.Sector),A
.FDWRITE:
IN A,(SLOT3)
EX AF,AF'
LD A,XH
OUT (SLOT3),A
LD B,4
LD C,FDC_93.Data
LD A,#A0 ;COMMAND WRITE
OUT (FDC_93.Command),A
.FDW001:
IN A,(FDC_93.DrvCTRL) ;WAIT INTRQ or DRQ
AND #C0
JR NZ,.FDW004
INC DE
LD A,E
OR D
JR NZ,.FDW001
DJNZ .FDW001
SCF
JR .FDW005
.FDW004:
OUTI ;WRITE BYTE
.FDW002:
IN A,(FDC_93.DrvCTRL)
AND #C0
JR Z,.FDW002
JP P,.FDW004
.FDW005:
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
;-------------------------------
POP DE
;EI
IN A,(FDC_93.Command)
LD C,A
;R01
JR C,.ERR_XWR
AND #7F
RET Z
BIT 6,C
LD A,BIOS.Error.WriteProtect
JR NZ,.WSTOP
BIT 2,C
JR NZ,.EWDATA
LD A,BIOS.Error.Seek
DEC D
JR Z,.WSTOP
.ERR_XWR:
PUSH DE
CALL RESWG ; RESET_WG
LD A,XL
CALL SEEK ; !!!!! ¯®á¬®âà¥âì
POP DE
JR .WRETRY
.EWDATA:
DEC D ; POTERIA DANNYH
JR NZ,.WRETRY
.ERRWR: LD A,BIOS.Error.Write
.WSTOP: EX AF,AF'
LD A,#D0
OUT (FDC_93.Command),A ;STOP OPERATION
EX AF,AF'
BIT 0,C
SCF
RET Z
LD A,BIOS.Error.SectorNotFound
RET
;
; ‚àã¡ ¥â âà¥âìî ª àâã ¯®à⮢
SET_DOS_ON:
EX AF,AF'
LD A,CNF_PORT.CNF_3 + ROM.BIOS
OUT (SYS_PORT.ROM),A ; - OPEN
EX AF,AF'
RET
; ‚àã¡ ¥â ­ã«¥¢ãî ª àâã ¯®à⮢
SET_DOS_OFF:
EX AF,AF'
LD A,CNF_PORT.CNF_0 + ROM.BIOS
OUT (SYS_PORT.ROM),A ; - CLOSE
EX AF,AF'
RET
;
S_FDD: PUSH BC
AND 1
LD B,A
OR #3C
OUT (FDC_93.DrvCTRL),A
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(FDD_INI_TABLE.FDD_0.DISK)
AND #FE
OR B
LD (FDD_INI_TABLE.FDD_0.DISK),A
EX AF,AF'
OUT (SLOT3),A
POP BC
RET
;
;
; MOTOR_OFF:
; PUSH AF
; LD A,#D0
; OUT (FDC_93.Command),A ;STOP OPERATION
; LD A,#00
; OUT (FDC_93.DrvCTRL),A
; LD A,#3C
; OUT (FDC_93.DrvCTRL),A
; CALL SET_DOS_OFF
; POP AF
; RET
;
;
CHANGE_SPEED: IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(FDD_INI_TABLE.FDD_0.F144)
XOR #80
LD (FDD_INI_TABLE.FDD_0.F144),A
AND #80
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
JR Z,FDD.SET720
;JP FDD.SET1440 ;ZF=0
FDD.SET1440: LD A,FDD_Density.SET_1440
OUT (FDD_Density),A
RET
;
;
SET_SPEED: IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(FDD_INI_TABLE.FDD_0.F144)
AND #80
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
JR NZ,FDD.SET1440
;JR FDD.SET720 ;ZF=1
FDD.SET720: LD A,FDD_Density.SET_720
OUT (FDD_Density),A
RET
; ¯à¥à뢠­¨ï ¤®«¦­ë ¡ëâì ®âª«î祭ë
DISK_ID: EXX
CALL SET_SPEED
IN A,(FDC_93.Track)
OUT (FDC_93.Data),A
LD A,#18 ;!TODO ¢ë¯¨á âì ª®¬¬ ­¤ë ‚ƒ ;SEARCH ; !HARDCODE
CALL EXECOM
LD C,4 ; áçñâ稪
.loop_reg_C: LD A,#C0
OUT (FDC_93.Command),A
LD HL,#F000 ; áçñâ稪
.loop_reg_HL: IN A,(FDC_93.DrvCTRL)
AND #C0
JR Z,.ID_LP4
;
.ID_LP2: IN A,(FDC_93.Data)
.ID_LP3: IN A,(FDC_93.DrvCTRL)
AND #C0
JR Z,.ID_LP3
JP P,.ID_LP2
EXX
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(FDD_INI_TABLE.FDD_0.F144)
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
AND #80
RET
;
.ID_LP4: DEC HL
LD A,H
OR L
JR NZ,.loop_reg_HL
CALL CHANGE_SPEED
DEC C
JR NZ,.loop_reg_C
EXX
SCF
RET
;
;
SEEK: LD XL,A
LD C,A
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(FDD_INI_TABLE.FDD_0.DISK)
AND 1
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
SRL C
JR C,.GT001
OR #3C
.GT001: OR #2C
OUT (FDC_93.DrvCTRL),A
IN A,(FDC_93.Track)
CP C
PUSH BC
CALL NZ,P50ms
POP BC
LD A,C
OUT (FDC_93.Data),A
IN A,(FDC_93.Track)
CP C
EX AF,AF' ;R.TRACK==PHISICAL TRACK
LD A,#18
CALL EXECOM
RET C
EX AF,AF'
LD A,C
OUT (FDC_93.Track),A
RET Z
.STOL: PUSH BC
CALL P50ms
POP BC
RET
;
;P750ms LD B,3
;PMS2 LD A,255
; CALL P1ms
; DJNZ PMS2
; RET
P50ms: LD A,12
.P1ms: LD C,255
.PMS: DEC C
JR NZ,.PMS
DEC A
JR NZ,.P1ms
RET
;
;
RESWG: LD A,8
EXECOM: OUT (FDC_93.Command),A
LD HL,#0000 ; áçñâ稪
.WREST: DEC HL
LD A,H
OR L
SCF
RET Z
;
IN A,(FDC_93.DrvCTRL)
AND #80
JR Z,.WREST
;AND A
RET
;
;
;-------------------------------
; HL:IX - SECTOR
; H - TRACK, L - SECTOR
;HL:IX/SECTOR_PER_TRACK
NTRACK:
PUSH HL
EX (SP),IX
POP HL
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(FDD_INI_TABLE.FDD_0.SECTORS)
LD C,A
LD B,0
EX AF,AF'
OUT (SLOT3),A
XOR A
.NTRK: INC A
SBC HL,BC
JR NC,.NTRK
EX AF,AF'
LD A,XL
OR XH
JR Z,.NTRK3
EX AF,AF'
DEC IX
JR .NTRK
.NTRK3: EX AF,AF'
ADD HL,BC
DEC A
LD H,A
RET
;
SAVE_INTERRUPTS:
.switch_off: PUSH AF
LD A,R
LD A,#80
JP PE,.set_R
XOR A
.set_R: LD R,A
DI
POP AF
RET
; ;
.restore: PUSH AF
LD A,R
BIT 7,A
JR Z,.set_di
EI
POP AF ; PE
RET
;
.set_di: DI
POP AF ; PO
RET
;[]===========================================================[]

View File

@ -0,0 +1,401 @@
;[x] 18/12/2023. ¤®¡ ¢«¥­¨¥/¤®¯¨«¨¢ ­¨¥ API CD-ROM (ATAPI)
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;CD ROM DRIVE DRIVER
;---------------------------------------------------------------
;Rev Date Name Description
;---------------------------------------------------------------
; 02-08-2001 DNS Initial this module
;---------------------------------------------------------------
;========================================================
SIZESEC EQU #0800
PKTSIZE EQU 12
RAM_ATAPI_PK EQU SYS_PAGE.SHARED_BUFFER_32b
RAM_ATAPI_READ EQU SYS_PAGE.SHARED_BUFFER_32b+16
ASSERT ((PKTSIZE % 2) = 0), "PKTSIZE must be an even number"
;[]================================================================[#51]
CD_5x_RESET:
LD C,IDE.Device.CDROM
CALL SELECT_DRIVE
RET C
LD B,50
.loop:
PUSH BC
CALL CD_TEST
POP BC
RET NC
EI
HALT
DJNZ .loop
RET
;[]================================================================[#51]
;[]================================================================[#55]
;Function: Read Sectors
; A - Disk
; HL:IX - Sector
; DE - Address
; B - Sector counter
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
;READ SECTOR(S)
CD_5x_READ:
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'
;[]================================================================[#52]
;Function: Long Read Sectors
; A - Disk
; HL:IX - Sector
; DE - Address
; B - Sector counter
; A'- Memory Page Number
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
;LONG READ SECTOR(S)
CD_5x_LONG_READ:
LD C,IDE.Device.CDROM
CALL SELECT_DRIVE
RET C
;
EXX
LD C,SLOT3
IN A,(C)
PUSH AF
LD A,SYS_PAGE
OUT (C),A
LD HL,ATAPI_CMD_PACKET.READ
LD DE,RAM_ATAPI_READ
LD BC,PKTSIZE
LDIR
EXX
LD A,H
LD H,L
LD L,A
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+0),HL
LD A,XH
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+2),A ;R01
LD A,XL
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+3),A ;R01
LD A,B
LD (RAM_ATAPI_READ + ATAPI_PACKET.COUNTER+1),A ;R01
;
EX AF,AF'
OUT (SLOT3),A
;
; POP AF
; OUT (SLOT3),A
LD HL,RAM_ATAPI_READ
CALL AP_COM
;
POP BC
LD C,SLOT3
OUT (C),B
;
RET
;[]===========================================================[#52, #55]
;[]================================================================[#57]
;Function: Detect Disk
; A - Disk
;Return: CF=0 - A=Drive type
; CF=1 - drive not present, A=#02
CD_5x_DETECT:
LD C,IDE.Device.CDROM
AND %1011'1111
JP DRV_DETECT
;[]================================================================[#57]
;[]================================================================[#5E]
;Function: Extended
; A - Disk
; B - SubFunction
;Return:
;
CD_5x_Extended:
LD C,IDE.Device.CDROM
CALL SELECT_DRIVE
RET C
;
LD A,B
CP 2
JR C,TRAY_FN
; ...
; ...
LD A,#AA ;!HARDCODE error code
SCF
RET
;[]================================================================[#5E]
;----------------------------------------------------------------------;
TRAY_FN:
LD DE,0 ;!FIXIT ­ã¦­® «¨?
LD HL,ATAPI_CMD_PACKET.CLOSE
DEC A
JR Z,AP_COM
LD HL,ATAPI_CMD_PACKET.OPEN
JR AP_COM
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; INPUT: HL - AP paket (12bytes)
; RETURN: CF - ERROR
; !TODO CD ERRORS to INCLUDES
; #01 - RECOVERED ERROR
; #02 - NOT READY
; #03 - MEDIUM ERROR
; #04 - HARDWARE ERROR
; #05 - ILLEGAL REQUEST
; #06 - UNIT ATTETION
; #07 - DATA PROTECT
; #0B - ABORTED COMMAND
; #80 - TIME OUT
AP_COM: EXX
LD DE,#8000
CALL CD_WAITPRT
EXX
JR NC,.READY
LD BC,IDE.Write.Command
LD A,IDE.ATAPI.Reset
OUT (C),A
LD B,#80
.pause: DJNZ .pause
EXX
LD DE,#8000
CALL CD_WAITPRT
EXX
RET C
.READY:
LD C,SLOT3
IN B,(C)
PUSH DE
PUSH BC
LD A,SYS_PAGE
OUT (C),A
LD A,B
LD DE,RAM_ATAPI_PK ;!FIXIT ¬®¦¥â ­  á⥪¥ ¢ë¤¥«ïâì ¬¥áâ®?
LD BC,PKTSIZE
LDIR
POP BC
POP DE
OUT (C),B
XOR A
EXX
;OUT (C),A
;XOR A
LD BC,IDE.Write.Features
OUT (C),A
LD DE,SIZESEC ;SIZE BLOCK ;!HARDCODE ¤®áâ ¢ âì ¨§ ¯¥à¥¬¥­­®© ª ª®©-­¨¡ã¤ì
LD BC,IDE.Write.CylinderLow
OUT (C),E
LD BC,IDE.Write.CylinderHigh
OUT (C),D
LD BC,IDE.Write.Command
LD A,IDE.ATAPI.Packet
OUT (C),A
LD DE,#8000
CALL CD_WAITPRT
EXX
RET C
EXX
LD DE,#0908
CALL CD_WAITPRT
EXX
BIT IDE.ControlBit.Error,A
JR NZ,.CDERROR
JR NC,.YEP_DRQ
LD A,#80 ; TIME OUT ;!HARDCODE
RET
.YEP_DRQ:
LD C,SLOT3
IN B,(C)
PUSH BC
LD A,SYS_PAGE
OUT (SLOT3),A
LD HL,RAM_ATAPI_PK
LD BC,IDE.Write.Data
LD A,PKTSIZE/2
.OUTPKT:
OUTI
OUTI
DEC A
JR NZ,.OUTPKT
POP BC
OUT (C),B
LD B,#80
.pause2: DJNZ .pause2
.AP_LOOP:
EXX
LD DE,#8000
CALL CD_WAITPRT
EXX
RET C
LD BC,IDE.Read.Status
IN A,(C)
BIT IDE.ControlBit.Error,A
JR Z,.NO_ERR
.CDERROR:
LD BC,IDE.Read.Error ;ERROR
IN A,(C)
RRCA
RRCA
RRCA
RRCA
AND #0F
SCF
RET
.NO_ERR:
BIT IDE.ControlBit.DataRequest,A
LD A,BIOS.Error.NoErrors
RET Z ;NO DATA REQUEST
EX DE,HL
LD BC,IDE.Read.CylinderLow
IN E,(C)
LD BC,IDE.Read.CylinderHigh
IN D,(C) ;TRANSFER BLOCK SIZE
LD A,D
OR E
RET Z ;BLOCK = 0
LD BC,IDE.Read.Counter
IN A,(C)
AND #02
;CP #02
JR NZ,.FROM_CD
;.TO_CD:
LD BC,IDE.Read.Data
.WR_T_CD:
OUTI
OUTI
DEC DE
DEC DE
LD A,D
OR E
JR NZ,.WR_T_CD
EX DE,HL
JR .AP_LOOP
.FROM_CD:
LD A,H
OR L
JR Z,.NULL
LD BC,IDE.Read.Data
.RD_F_CD:
INI
INI
DEC DE
DEC DE
LD A,D
OR E
JR NZ,.RD_F_CD
EX DE,HL
JR .AP_LOOP
.NULL: LD BC,IDE.Read.Data
.RD_N_CD:
IN A,(C)
DEC B
IN A,(C)
DEC B
DEC DE
DEC DE
LD A,D
OR E
JR NZ,.RD_N_CD
; DE = 0
JR .AP_LOOP
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; D - MASK
; E - PATTERN
CD_WAITPRT:
LD BC,IDE.Read.Status
LD A,100
LD HL,#0000
.CWAITPX:
EX AF,AF'
.CWAITP0:
IN A,(C)
CP #FF
JR Z,.CWAITP1
AND D
CP E
JR NZ,.CWAITP2
AND A
RET
.CWAITP2:
DEC L
JR NZ,.CWAITP0
DEC H
JR NZ,.CWAITP0
EX AF,AF'
DEC A
JR NZ,.CWAITPX
EX AF,AF'
.CWAITP1:
SCF
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
CD_TEST LD HL,ATAPI_CMD_PACKET.NOP
LD DE,0 ;!FIXIT ­ã¦­® «¨?
JP AP_COM
;----------------------------------------------------------------------;
////////////////////////////////////////////////////////////////////////
ATAPI_CMD_PACKET:
.NOP: DUP 12
DB #00
EDUP
;
.OPEN: DB #1B
DB #00,#00,#00
DB #02
DB #00,#00,#00,#00,#00,#00,#00
;
.CLOSE: DB #1B
DB #00,#00,#00
DB #03
DB #00,#00,#00,#00,#00,#00,#00
;
.READ: DB #28,#00
DB #00,#00,#00,#00 ; sector dword
DB #00
DB #00,#01,#00,#00 ; counter dword
DB #00
;
ATAPI_PACKET:
.SECTOR EQU 2
.COUNTER EQU 7
////////////////////////////////////////////////////////////////////////
;
; E - Second * 10
; PAUSE LD HL,#0000
; PAUSE1 DEC L
; JR NZ,PAUSE1
; DEC H
; JR NZ,PAUSE1
; DEC E
; JR NZ,PAUSE1
; RET
;

View File

@ -0,0 +1,663 @@
;========================================================
;R03 !25.07.2001! BUG FIX WITH RETURN ERROR CODE
;R02 !24.07.2001! ADD SECONDARY CHANEL
;R01 !16.08.2000! REMOVED "DI"
/*
;Write
IDE.Write.Command EQU #4153 ; #1F7 Command
IDE.Write.DeviceHead EQU #4152 ; #1F6 Drive Control
HDW_CLH EQU #0155 ; #1F5 Cylinder High
HDW_CLL EQU #0154 ; #1F4 Cylinder Low
HDW_SEC EQU #0153 ; #1F3 Sector
HDW_CNT EQU #0152 ; #1F2 Counter
HDW_ERR EQU #0151 ; #1F1 Error
HDW_DAT EQU #0150 ; #1F0 Data
;Read
IDE.Read.Status EQU #4053 ; #1F7 Status (Control)
HDR_DRV EQU #4052 ; #1F6 Drive Control
HDR_CLH EQU #0055 ; #1F5 Cylinder High
HDR_CLL EQU #0054 ; #1F4 Cylinder Low
HDR_SEC EQU #0053 ; #1F3 Sector
HDR_CNT EQU #0052 ; #1F2 Counter
HDR_ERR EQU #0051 ; #1F1 Error
HDR_DAT EQU #0050 ; #1F0 Data
;Bits for IDE.Read.Status
;---[]
BSY EQU 7
RDY EQU 6
DRQ EQU 3
ERR EQU 0
;---[]
HDD EQU 1
CDROM EQU 2
;EQU FOR IY+
IDE.HDD_INIT_TABLE.DRV_Flags EQU 0
IDE.HDD_INIT_TABLE.SectorsPerTrack EQU 1
IDE.HDD_INIT_TABLE.HeadsNumber EQU 2
IDE.HDD_INIT_TABLE.CylinderNumberLow EQU 3
IDE.HDD_INIT_TABLE.CylinderNumberHigh EQU 4
IDE.HDD_INIT_TABLE.SectorsPerCylinderLow EQU 5
IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh EQU 6
DTYPE_H EQU 7
IDE0 EQU #C1C0
IDE1 EQU #C1C8
IDE2 EQU #C1D0
IDE3 EQU #C1D8
*/
;IDE0 DB #FF ;DRIVE/HEAD REGISTER ;00
; DB #FF ;SECTORS PER TRACK ;01
; DB #FF ;HEADS ;02
; DB #FF ;CYLINDERS LOW ;03
; DB #FF ;CYLINDERS HIGH ;04
; DB #FF ;SECTOR PER CYLINDER LOW ;05
; DB #FF ;SECTOR PER CYLINDER HIGH ;06
; DB #FF ;RESERVED ;07
;IDE1 DB #FF ;DRIVE/HEAD REGISTER ;00
; DB #FF ;SECTORS PER TRACK ;01
; DB #FF ;HEADS ;02
; DB #FF ;CYLINDERS LOW ;03
; DB #FF ;CYLINDERS HIGH ;04
; DB #FF ;SECTOR PER CYLINDER LOW ;05
; DB #FF ;SECTOR PER CYLINDER HIGH ;06
; DB #FF ;RESERVED ;07
WRITE_OUTI_DUPs EQU 32 ; bytes
;[]================================================================[#51]
;Function: Reset drive
HDD_5x_RESET: ; !FIXIT ­¥ à¥á¥â¨âáï?
;For non-ATAPI drives, the only method a driver has of resetting a drive
; after a major error is to do a "software reset" on the bus.
; Set bit 2 (SRST, value = 4) in the proper Control Register for the
; bus. This will reset both ATA devices on the bus. Then, you have to
; clear that bit again, yourself. The master drive on the bus is
; automatically selected.
XOR A
RET
;[]================================================================[#51]
;[]================================================================[#58]
;Function: Get Current Media Parameters
; A - Disk
;Return:
; H - Heads
; L - Sectors per cylinder
; DE - Cylinders
; IX - Capacity sector in bytes
; B - Flags: MASTER/SLAVE, LBA/CHS
HDD_5x_GETMED:
LD C,IDE.Device.HDD
CALL SELECT_DRIVE
RET C
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack)
LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber)
LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow)
LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh)
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
LD IX,512 ;!HARDCODE sector size
EX AF,AF'
OUT (SLOT3),A
;EX AF,AF'
AND A
RET
;[]================================================================[#58]
;[]================================================================[#59]
;Function: Set Current Media Parameters
; A - Disk
; H - Heads
; L - Sectors
; DE - Cylinders
; IX - Capacity sector in bytes
; B - Flags
;Return: None
HDD_5x_SETMED:
LD C,IDE.Device.HDD
CALL SELECT_DRIVE
RET C
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),L
LD (IY+IDE.HDD_INIT_TABLE.HeadsNumber),H
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),E
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),D
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),B
EX AF,AF'
OUT (SLOT3),A
;EX AF,AF'
AND A
RET
;[]================================================================[#59]
;[]================================================================[#55]
;Function: Read Sectors
; A - Disk
; HL:IX - Sector
; DE - Address
; B - Sector counter
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
;READ SECTOR(S)
HDD_5x_READ:
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'
;[]================================================================[#52]
;Function: Long Read Sectors
; A - Disk
; HL:IX - Sector
; DE - Address
; B - Sector counter
; A'- Memory Page Number
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
;LONG READ SECTOR(S)
HDD_5x_LONG_READ:
PUSH IY
SAFE_PORTY_2
PUSH BC
PUSH IX
PUSH HL
CALL RDS000
EX DE,HL
JR C,HERRRD0
LD A,XH
EX AF,AF'
POP HL
POP IX
POP BC
XOR A
CP B
LD C,B
LD B,A
JR NZ,RNOT256
INC B
ADD IX,BC
LD B,C
ADC HL,BC
;EX AF,AF' ;!TEST 21/11/23
JR RST8RDR
RNOT256 ADD IX,BC
LD C,B
ADC HL,BC
;EX AF,AF' ;!TEST 21/11/23
JR RST8RDR
HERRRD0 LD B,A
LD C,XL
LD A,XH
EX AF,AF'
POP HL
POP IX
PUSH BC
LD B,0
ADD IX,BC
LD C,B
ADC HL,BC
POP BC
POP AF
SUB C
LD C,A
LD A,B
LD B,C
;R03
SCF
;EX AF,AF' ;!TEST 21/11/23
;
RST8RDR: RESTORE_PORTY
POP IY
;EX AF,AF' ;!TEST 21/11/23
RET
;READ SECTOR(S)
RDS000: LD C,IDE.Device.HDD
CALL SELECT_DRIVE
RET C
EXX
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
CALL WAITPRT
EXX
RET C
EX AF,AF'
PUSH AF
PUSH DE
CALL PRESET
POP HL
POP AF
LD XL,0
LD XH,A
LD BC,IDE.Write.Command
LD A,IDE.ATA.ReadSectorsWithRetry
OUT (C),A
;?????
;SAVE HL!
RDS002: EXX
LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0
CALL WAITPRT
EXX
RET C
;NOP ;R01 REMOVED "DI"
IN A,(SLOT3)
EX AF,AF'
LD A,XH
OUT (SLOT3),A
LD BC,IDE.Read.Data
RDS003: DUP 16
INI
EDUP
JP NZ,RDS003
RDS004: DUP 16
INI
EDUP
JP NZ,RDS004
EX AF,AF'
OUT (SLOT3),A
;
LD A,H
OR L
JR NZ,.W44
LD HL,#C000
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD D,#C2
LD E,XH
LD A,(DE)
LD XH,A
EX AF,AF'
OUT (SLOT3),A
;
.W44: INC XL ;INC LOADED SECTORS
EXX
LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
CALL WAITPRT
EXX
RET C
LD BC,IDE.Read.Status
IN A,(C)
BIT IDE.ControlBit.DataRequest,A
JP NZ,RDS002
XOR A
RET
;[]===========================================================[#52, #55]
;[]================================================================[#56]
;Function: Write Sectors
; A - Disk
; HL:IX - Sector
; DE - Address
; B - Sector counter
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
;WRITE SECTOR(S)
HDD_5x_WRITE:
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'
;[]================================================================[#53]
;Function: Long Write Sectors
; A - Disk
; HL:IX - Sector
; DE - Address
; B - Sector counter
; A'- Memory Page Number
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
;WRITE SECTOR(S)
HDD_5x_LONG_WRITE:
PUSH IY
SAFE_PORTY_2
PUSH IX
PUSH HL
PUSH BC
CALL WRS000
EX DE,HL
JP C,HERRWR0
LD A,XH
EX AF,AF'
POP BC
POP HL
POP IX
XOR A
CP B
LD C,B
LD B,A
JR NZ,WNOT256
INC B
ADD IX,BC
LD B,C
ADC HL,BC
;EX AF,AF'
JR RST8WRR
WNOT256 ADD IX,BC
LD C,B
ADC HL,BC
;EX AF,AF'
JR RST8WRR
HERRWR0 LD B,A
LD C,XL
LD A,XH
EX AF,AF'
POP HL
POP IX
PUSH BC
LD B,0
ADD IX,BC
LD C,B
ADC HL,BC
POP BC
POP AF
SUB C
LD C,A
LD A,B
LD B,C
;R03
SCF ;R03
;EX AF,AF' ;R03 ;!FIXIT ­ ¬ã¤à¨« ®­ çñâ ¢ í⮬ R03
;
RST8WRR: RESTORE_PORTY
POP IY
;EX AF,AF'
RET
;WRITE SECTOR(S)
WRS000:
LD C,IDE.Device.HDD
CALL SELECT_DRIVE
RET C
EXX
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
CALL WAITPRT
EXX
RET C
EX AF,AF'
PUSH AF
PUSH DE
;[x] CMOS Write Protect Disabled
IF HDDwriteProtect
PUSH BC
LD D,CMOS_CELL.Options
CALL CMOS_RD
POP BC
AND 1
JR Z,NO_WriteProtect
POP HL
POP AF
EX AF,AF'
LD XL,0
LD A,BIOS.Error.WriteProtect
SCF
RET
ENDIF
NO_WriteProtect:
CALL PRESET
POP HL
POP AF
LD XL,0
LD XH,A
LD BC,IDE.Write.Command
LD A,IDE.ATA.WriteSectorsWithRetry
OUT (C),A
;SAVE HL!
WRS002: EXX
LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0
CALL WAITPRT
EXX
RET C
;DI
IN A,(SLOT3)
EX AF,AF'
LD A,XH
OUT (SLOT3),A
LD BC,IDE.Write.Data
;LD D,#20
LD D,512/WRITE_OUTI_DUPs
WRS003:
DUP WRITE_OUTI_DUPs
OUTI
EDUP
DEC D
JR NZ,WRS003
EX AF,AF'
OUT (SLOT3),A
//EI
;
LD A,H
OR L
JR NZ,.W33
LD HL,#C000
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD D,#C2
LD E,XH
LD A,(DE)
LD XH,A
EX AF,AF'
OUT (SLOT3),A
.W33: INC XL ;INC SAVED SECTORS
EXX
LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
CALL WAITPRT
EXX
RET C
LD BC,IDE.Read.Status
IN A,(C)
BIT IDE.ControlBit.DataRequest,A
JP NZ,WRS002
XOR A
RET
;[]===========================================================[#53, #56]
;[]================================================================[#54]
;Function: Verify Sectors
; A - Disk
; HL:IX - Sector
; B - Sector counter
;Return: None
;VERIFY SECTOR(S)
HDD_5x_VERIFY:
PUSH IY
SAFE_PORTY_2
PUSH IX
PUSH HL
CALL VRS000
POP HL
POP IX
RESTORE_PORTY
POP IY
RET
;[]================================================================[#54]
;VERIFY SECTOR(S)
VRS000: LD C,IDE.Device.HDD
CALL SELECT_DRIVE
RET C
EXX
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
CALL WAITPRT
EXX
RET C
PUSH DE
CALL PRESET
POP HL
LD BC,IDE.Write.Command
LD A,IDE.ATA.ReadVerifySectorsWithRetry
OUT (C),A
VRS002: LD BC,IDE.Read.Status
IN A,(C)
BIT IDE.ControlBit.Error,A
JR Z,VRS003
SCF
RET
VRS003: LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
CALL WAITPRT
RET C
XOR A
RET
; HL:IX - LBA SECTOR
; B - SECTOR COUNTER
PRESET: LD A,B
LD BC,IDE.Write.Counter
OUT (C),A
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
LD BC,IDE.Write.DeviceHead
OUT (C),A
;¡¨â CHS/LBA ;!FIXIT ᤥ« âì ¬¥âª ¬¨ ­®¬¥à  ¡¨â
AND %0100'0000
LD E,XL
LD D,XH
CALL Z,LBA_CHS
LD BC,IDE.Write.Sector
OUT (C),E ;LBA 0..7
IF IDE_Optimization
INC C ; LD BC,IDE.Write.CylinderLow
OUT (C),D ;LBA 8..15
INC C ; LD BC,IDE.Write.CylinderHigh
OUT (C),L ;LBA 16..23
LD BC,IDE.Read.Control
IN A,(C)
AND #F0 ;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask
OR H ;LBA 24..27
INC B ; LD BC,IDE.Write.DeviceHead
ELSE
LD BC,IDE.Write.CylinderLow
OUT (C),D ;LBA 8..15
LD BC,IDE.Write.CylinderHigh
OUT (C),L ;LBA 16..23
LD BC,IDE.Read.Control
IN A,(C)
AND #F0 ;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask
OR H ;LBA 24..27
LD BC,IDE.Write.DeviceHead
ENDIF
OUT (C),A
EX AF,AF'
OUT (SLOT3),A
AND A
RET
; HL:DE - SECTOR OFFSET
LBA_CHS:
LD C,(IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderLow)
LD B,(IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh)
; HL:DE / BC => DE:IX HL-OSTATOK
DIV32X: LD XH,D
LD XL,E
EX DE,HL
LD HL,0
LD A,#20
DIV011: ADD IX,IX
EX DE,HL
ADC HL,HL
EX DE,HL
ADC HL,HL
SBC HL,BC
JR NC,DIV012
ADD HL,BC
DEC A
JR NZ,DIV011
JR DIV014
DIV012: INC IX
DEC A
JR NZ,DIV011
DIV014: LD E,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack)
LD D,0
XOR A
CHS005: INC A
SBC HL,DE
JR NC,CHS005
ADD HL,DE
DEC A
LD H,A
LD E,L
INC E
LD D,XL
LD A,XH
LD L,A
RET
;----------------------------------------------------------------------;
; D - MASK
; E - PATTERN
WAITPRT:
LD BC,IDE.Read.Status
LD HL,#0000 ; § ¤¥à¦ª  ;!HARDCODE
;
.loop: PUSH HL
;
.loop2: IN A,(C)
AND D
CP E
JR Z,.ok
DEC HL
LD A,L
OR H
JP NZ,.loop2
;
POP HL
DEC L
JR NZ,.loop
;
.error: LD A,BIOS.Error.NotReady
SCF
RET
.ok: POP HL
RET
;----------------------------------------------------------------------;
;[]================================================================[#57]
;[x] 18/12/2023. ¤®¡ ¢«¥­¨¥/¤®¯¨«¨¢ ­¨¥ API CD-ROM (ATAPI)
;Function: Detect Disk
; A - Disk
;Return: CF=0 - A=Drive type
; CF=1 - drive not present, A=#02
HDD_5x_DETECT:
LD C,IDE.Device.HDD
JP DRV_DETECT
;[]================================================================[#57]

View File

@ -0,0 +1,100 @@
;[x] 18/12/2023. ¤®¡ ¢«¥­¨¥/¤®¯¨«¨¢ ­¨¥ API CD-ROM (ATAPI)
;=======================================================================
; ‚室: A - ­®¬¥à ãáâனá⢠
; C - ’¨¯
SELECT_DRIVE:
AND #0F
LD IY,IDE.INIT_TBL_IDE0
JR Z,.channel
DEC A
LD IY,IDE.INIT_TBL_IDE1
;R02
JR Z,.channel
DEC A
LD IY,IDE.INIT_TBL_IDE2
JR Z,.channel
DEC A
LD IY,IDE.INIT_TBL_IDE3
;
JR Z,.channel
LD A,BIOS.Error.BadNumber
SCF
RET
;
.channel:
EXX
IN A,(SLOT3)
PUSH AF
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
AND 1
LD A,IDE.Chanel.Secondary
JR NZ,.device
LD A,IDE.Chanel.Primary
.device:
OUT (IDE.Chanel.Set),A ;R02
LD C,(IY+IDE.HDD_INIT_TABLE.DriveType)
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
POP AF
OUT (SLOT3),A ;¢®§¢à â áâà ­¨æë
;
LD A,C
EXX
CP C
EXX
SCF
LD A,BIOS.Error.BadNumber
RET NZ
;
LD A,B
AND #F0
LD BC,IDE.Write.DeviceHead
OUT (C),A
EXX
RET
;
; NODRIVE:
; LD A,BIOS.Error.BadDrvNumber
; SCF
; RET
;=======================================================================
;=======================================================================
;Function: Detect Disk
; A - Disk
; - Type
;Return: CF=0 - A=Drive type
; CF=1 - drive not present, A=#02
DRV_DETECT:
CP #84 ;!HARDCODE max IDE drives (#80,#81,#82,#83)
CCF
JR C,.error
LD HL,IDE.INIT_TBL_IDE0.DriveType
AND 3
JR Z,.get_param
LD HL,IDE.INIT_TBL_IDE1.DriveType
DEC A
JR Z,.get_param
LD HL,IDE.INIT_TBL_IDE2.DriveType
DEC A
JR Z,.get_param
LD HL,IDE.INIT_TBL_IDE3.DriveType
.get_param:
IN A,(SLOT3)
LD B,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(HL)
CP C ; compare Type
LD C,SLOT3
OUT (C),B
RET Z
SCF
.error: LD A,BIOS.Error.BadNumber
RET

View File

@ -0,0 +1,189 @@
;!TODO ᤥ« âì ¢ë¡®à à ¬¤à ©¢  ¯® §­ ç¥­¨î bit 0..3 ॣ¨áâà  €
; ­ ¯à¨¬¥à: A = #6E ®§­ ç ¥â: 6 - RAM Drive, #E - ¤¨áª E:
;
;[]===========================================================[]
;Function: Set Current Media Parameters
; A - Disk
; H - Heads
; L - Sectors
; DE - Cylinders
; IX - Capacity sector in bytes
; B - Flags
;Return: None
;[]===========================================================[]
;!FIXIT
RMD_5x_SETMED:
and a
ret
; A - Disk
; H - Heads
; L - Sectors
; DE - Cylinders
; IX - Capacity sector in bytes
; B - Flags
; DB 'E' - 'A' = 4
;
;
;
;[]===========================================================[]
;Function: Get Current Media Parameters
; A - Disk
;Return:
; H - Heads
; L - Sectors per cylinder
; DE - Cylinders
; IX - Capacity sector in bytes
; B - Flags: ramblock ID
;[]===========================================================[]
RMD_5x_GETMED:
.SectorSize EQU 512 ;!HARDCODE
AND #0F
CALL GET_RAMD_ST ; ¯®«ã祭¨¥ ¨¤¥­â¨ä¨ª â®à  ¡«®ª 
RET C
SCF
RET Z
;
LD C,A
LD B,#FF
.loop: INC B
PUSH BC
LD A,C
CALL EMM.GetMemPage ; ¯®«ãç¨âì 䨧¨ç¥áª¨© ­®¬¥à áâà ­¨æë ¨§ ¡«®ª 
POP BC
JR NC,.loop
; CF==1, A==0 - ®è¨¡ª , A==#FF - ok
INC A
RET NZ ; ¥á«¨ ¢ë室¨â, â® á ä« £ ¬¨ CF==1, ZF==1
LD E,B
LD B,C
; âãâ ¢ E ª®«¨ç¥á⢮ áâà ­¨æ ¢ à ¬¤¨áª¥, B - ID à ¬¤¨áª 
LD HL,1*256 + #4000/.SectorSize
LD D,0
LD IX,.SectorSize
RET
////////////////////////////////////////////////////////////////////////////////////
RMD_5x_LONG_WRITE:
LD C,#FF
JP RAM_DRV_READ_WRITE
RMD_5x_LONG_READ:
LD C,0
JP RAM_DRV_READ_WRITE
RMD_5x_WRITE:
LD C,#FF
JP RAM_DRV_NO_LONG
RMD_5x_READ:
LD C,0
;JP RAM_DRV_NO_LONG
RAM_DRV_NO_LONG:
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'
; <20>€ ¢å®¤¥ ॣ = 0 ¥á«¨ ç⥭¨¥, «¨¡® #FF, ¥á«¨ § ¯¨áì
RAM_DRV_READ_WRITE:
PUSH HL
PUSH AF
LD L,B
IN A,(SLOT3)
LD H,A
; LD A,H
; OR L
; JR NZ,.error_stack2 ; if sector_high > 0
; POP AF
POP AF
EX (SP),HL
PUSH AF
LD A,H
OR L
JR NZ,.error_stack2 ; if sector_high > 0
POP AF
EX AF,AF'
OUT (SLOT3),A
LD A,C ; ¢ ॣ C ª®¬ ­¤  ç⥭¨ï ¨«¨ § ¯¨á¨
EX AF,AF'
; A' = command
PUSH BC ; Sector_counter
PUSH DE ; Address
PUSH IX ; Sector_low
AND #0F ;­®¬¥à à ¬¤¨áª 
;LD C,BIOS.GET_RAMD_ST
;RST_to_BIOS
CALL GET_RAMD_ST
; A = Memory Block ID
POP DE ; Sector_low
POP HL ; Address
POP BC ; Sector_counter
JR C,.error_stack1
SLA E
RL D ; Sector_low * 2
JR C,.error_stack1
PUSH BC
SLA B ; Sector_counter * 2 - ⨯  ã ¤¨áª¥âë ᥪâ®à 512 ¡ ©â®¢
JR C,.error_stack2
PUSH DE
//PUSH BC
;LD C,BIOS.BLK_RD_WR
;RST_to_BIOS
CALL BLK_RD_WR
JR C,.error_stack3
; hl = address + Sector_low * 256 * Sector_counter
//POP BC
//SRL B
POP DE
; de = Sector_low * 2
SRL D
RR E
; de = Sector_low
POP BC
; b = Sector_counter
LD A,E
ADD A,B
LD E,A
LD A,D
ADC A,0
LD D,A
; de = Sector_counter + Sector_low
PUSH DE
POP IX
; ix = Sector_counter + Sector_low
EX DE,HL
; de = address + Sector_low * 256 * Sector_counter
LD HL,0
POP AF
OUT (SLOT3),A
AND A
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
RET
.error_stack3:
POP BC
.error_stack2:
POP DE
.error_stack1:
POP AF
OUT (SLOT3),A
SCF
RET
////////////////////////////////////////////////////////////////////////////////////

786
Crazy BIOS/exp/FLEX.asm Normal file
View File

@ -0,0 +1,786 @@
SYCLES EQU 0
;START EQU 1
ST1 EQU 2
DPAL1 EQU 3
ST2 EQU 4
DPAL2 EQU 5
MACRO NEXT_LIN_H
EX AF,AF'
INC A
OUT (RGADR),A
EX AF,AF'
ENDM
MACRO NEXT_LIN_HP
EX AF,AF'
INC A
OUT (RGADR),A
JR NZ,.MD_NO_INC_H
inc l
.MD_NO_INC_H:
EX AF,AF'
ENDM
;*****************************************
;
; ˆ­¨æ¨ «¨§ æ¨ï áâà ­¨æ ¤«ï
; ᯥªâà㬮¢áª®£® ०¨¬  ¨
; ¢®ááâ ­®¢«¥­¨¥ ᯥªâà㬮¢áª®£®
; íªà ­ 
;
; ‚®§¢à â ¯® IX
;
; !!! NO USE STACK !!!
;
;*****************************************
; ¨­¨æ¨ «¨§ æ¨ï áâà ­¨æ zx spectrum
INIT_PAGES:
AND A
LD E,A
EX AF,AF'
LD A,E
; BIT 7,A
; JR Z,SCORPION_256_MODE
; BIT 6,A
; JR Z,PENTAGON_128_MODE
;
;PENTAGON_48_MODE:
; AND 03CH
; OUT (SLOT0),A
; INC A
; OUT (SLOT1),A
; INC A
; OUT (SLOT2),A
; INC A
; LD D,A
; LD BC,1FFDH
; XOR A
; OUT (C),A
; LD B,7FH
; OUT (C),A
; LD A,D
; OUT (SLOT3),A
; JR INIT_VIDEO_REG
;
;
; PENTAGON_128_MODE:
; LD D,8
; AND #38
; JR ALL_MODE
SCORPION_256_MODE:
LD D,16
AND #30 ; ¤® 4-å ᯥªâà㬮¢
ALL_MODE:
OUT (SLOT0),A
XOR 5
OUT (SLOT1),A
XOR 7
OUT (SLOT2),A
OR #0F
LD E,A
.loop: DEC D
LD A,D
RLCA
AND #10
LD BC,#1FFD
OUT (C),A
LD A,D
AND 7
OR #40
LD B,#7F
OUT (C),A
LD A,E
OUT (SLOT3),A
DEC E
DEC D
INC D
JR NZ,.loop
INIT_VIDEO_REG:
XOR A
OUT (RGADR),A ; ॣ¨áâà ¢¨¤¥®  ¤à¥á 
; OUT (RGSCR),A ; ॣ¨áâà íªà ­ 
OUT (RGMOD),A ; ॣ¨áâà ¬®¤ë
;!TEST
; Restore old Spectrum Screen
;; LD HL,#4000
;; LD DE,#4000
;; LD BC,#1B00
;; LDIR
; EX AF,AF'
; BIT 6,A
; JR NZ,NO_SCREEN_ALT
; EX AF,AF'
; LD A,7 ; ᥤ쬠ï íªà ­­ ï áâà ­¨æ 
; LD BC,#7FFD
; OUT (C),A
; Restore old Spectrum Screen 2
;; LD HL,#C000
;; LD DE,#C000
;; LD BC,#1B00
;; LDIR
; XOR A
; LD BC,#7FFD
; OUT (C),A
;
EX AF,AF'
NO_SCREEN_ALT:
AND A
JP (IX)
;****************************************
; ‡ £à㧪  ०¨¬  íªà ­ .
;****************************************
; CALL SINC_DEF
; CALL SET_PAL_ZX
; RET
;****************************************
;!TODO âãâ äã­ªæ¨ï
CL0 EQU 200
CL1 EQU 240
SET_PAL_IBM:
LD DE,#8000
JR SET_PAL_TXT
SET_PAL_ZX:
LD DE,0
SET_PAL_TXT:
PUSH IX
IN A,(RGADR)
PUSH AF
IN A,(SLOT3)
EX AF,AF'
LD A,#50
OUT (SLOT3),A
LD IX,#C3F0 ; !HARDCODE  ¤à¥á ¯ «¨âàë?
.generate_loop:
CALL GENERATE_PAL1
LD A,E
OUT (RGADR),A
LD (IX),L ; R
LD (IX+1),B ; G
LD (IX+2),C ; B
LD (IX+3),H ; i ?
INC E
JR NZ,.generate_loop
;
LD BC,4
ADD IX,BC
INC D
LD A,D
AND 3
JR NZ,.generate_loop
EX AF,AF'
OUT (SLOT3),A
POP AF
OUT (RGADR),A
POP IX
RET
; £¥­¥à æ¨ï ᯥªâà㬮¢áª®© ¯ «¨âàë.
; ‚室: E -  âਡãâ, D - ­®¬¥à ¯ «¨âàë
; ‚›•Ž„: L - red, B - green, C - blue, H - intensity
GENERATE_PAL1: XOR A
LD C,A
LD B,A
LD L,A
BIT 7,D
JR NZ,GENERATE_IBM
BIT 1,D
JR NZ,.FLH
.NOF: BIT 0,D
JR Z,.PAPER
.INK: LD A,CL0
BIT 6,E
JR Z,.NOI1
LD A,CL1
.NOI1: BIT 0,E ; BLUE
JR Z,.NO1
LD C,A
.NO1: BIT 1,E ; RED
JR Z,.PP_NO2
LD L,A
.PP_NO2: BIT 2,E ; GREEN
JR Z,.PP_NO3
LD B,A
.PP_NO3: JR .PP_NO6
;
.FLH: BIT 7,E
JR Z,.NOF
BIT 0,D
JR Z,.INK
.PAPER: LD A,CL0
BIT 6,E
JR Z,.NOI2
LD A,CL1
.NOI2: BIT 3,E ; BLUE
JR Z,.PP_NO4
LD C,A
.PP_NO4: BIT 4,E ; RED
JR Z,.PP_NO5
LD L,A
.PP_NO5: BIT 5,E ; GREEN
JR Z,.PP_NO6
LD B,A
.PP_NO6: LD A,C
AND A
RRA
ADD A,L
RRA
ADD A,B
RRA
LD H,A ; B/W mode
RET
;****************************************
GENERATE_IBM:
BIT 7,E
JR Z,.NO_FLH
BIT 1,D
JR Z,.PAPER
.NO_FLH:
BIT 0,D
JR Z,.PAPER
.INK:
.NO_INTENS:
LD A,#A8
.INTENS:
BIT 0,E ; BLUE
JR Z,.PPI_NO4
LD C,A
.PPI_NO4:
BIT 2,E ; RED
JR Z,.PPI_NO5
LD L,A
.PPI_NO5:
BIT 1,E ; GREEN
JR Z,.PPI_NO6
LD B,A
.PPI_NO6:
LD A,E
AND #0F
CP 6
JR NZ,.no_correct
LD B,#54
.no_correct:
BIT 3,E
JR Z,GENERATE_PAL1.PP_NO6
LD A,#54
ADD A,C
LD C,A
LD A,#54
ADD A,B
LD B,A
LD A,#54
ADD A,L
LD L,A
JR GENERATE_PAL1.PP_NO6
.PAPER:
LD A,#A8
BIT 4,E ; BLUE
JR Z,.PPI_NO4X
LD C,A
.PPI_NO4X:
BIT 6,E ; RED
JR Z,.PPI_NO5X
LD L,A
.PPI_NO5X:
BIT 5,E ; GREEN
JR Z,.PPI_NO6X
LD B,A
.PPI_NO6X:
LD A,E
AND #70
CP #60
JR NZ,GENERATE_PAL1.PP_NO6
LD B,#54
JR GENERATE_PAL1.PP_NO6
;****************************************
;****************************************
;****************************************
; D - ­®¬¥à £à ä¨ç¥áª®© ¯ «¨âàë
SET_PAL_GRAF:
PUSH IX
IN A,(RGADR)
PUSH AF
IN A,(SLOT3)
EX AF,AF'
LD A,#50
OUT (SLOT3),A
LD IX,#C3E0
LD A,D
AND 3
ADD A,A
ADD A,A
LD E,A
LD D,0
ADD IX,DE
LD E,0
XOR A
LD B,A
LD C,A
LD L,A
LD H,A
SET_PAL_GR1:
LD A,E
OUT (RGADR),A
LD (IX),L
LD (IX+1),B
LD (IX+2),C
LD (IX+3),H
CALL GENERATE_PAL3
INC E
LD A,E
CP 40
JR NZ,SET_PAL_GR1
XOR A
LD B,A
LD C,A
LD L,A
LD H,A
SET_PAL_GR2:
LD A,E
OUT (RGADR),A
LD (IX),L
LD (IX+1),B
LD (IX+2),C
LD (IX+3),H
CALL GENERATE_PAL2
INC E
JR NZ,SET_PAL_GR2
EX AF,AF'
OUT (SLOT3),A
POP AF
OUT (RGADR),A
POP IX
RET
;
;;*********************************
;
GENERATE_PAL3: ; gray-scale
LD A,B
ADD A,6
LD B,A
LD C,A
LD L,A
LD A,C
AND A
RRA
ADD A,L
RRA
ADD A,B
RRA
LD H,A
RET
GENERATE_PAL2: ; C - BLUE; L - RED; B - GREEN; H - INTENSITY
LD A,C
ADD A,50
LD C,A
JR NC,GEN_PAL2_L1
LD C,0
LD A,L
ADD A,50
LD L,A
JR NC,GEN_PAL2_L1
LD L,0
LD A,B
ADD A,50
LD B,A
JR NC,GEN_PAL2_L1
LD B,0
GEN_PAL2_L1:
LD A,C
AND A
RR A
ADD A,L
RR A
ADD A,B
RR A
LD H,A
RET
;
;;*****************************************
FN_SYNC:
BIT 7,a
JR Z,.old_mode
ld h,a
and #60 ; check reserved bits
jr nz,.error
bit 2,h ; Set V-Sinc?
jr nz,.set_v_sinc
bit 4,h ; Set Waits?
jr z,.error ; Error - no parameters
.set_waits:
ld a,h
and 8 ; check waits. Z - no waits, NZ - waits
ld h,#FF
jr z,1F
ld h,#FB
1:
ld bc,(Port_All_Mode)
in a,(C)
and h
out (C),a
RET
.set_v_sinc:
ld a,h
and 3
jr z,.SetDefLines
dec a
jr z,.SetCmosLines
dec a
jr z,.Set320Lines
; jr Set312Lines
.set312lines:
ld a,Port_VSYNC.SET_312L
out (Port_VSYNC),a
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
ld a,(SYS_PAGE.VSyncAndWaits)
and 2
ld (SYS_PAGE.VSyncAndWaits),a
OUT (C),B
.end_set_v_sinc:
bit 4,h
ret z
jr .set_waits
.Set320Lines:
ld a,Port_VSYNC.SET_320L
out (Port_VSYNC),a
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
ld a,(SYS_PAGE.VSyncAndWaits)
or 1
ld (SYS_PAGE.VSyncAndWaits),a
OUT (C),B
jr .end_set_v_sinc
.SetCmosLines:
LD D,CMOS_CELL.ScreenSET
CALL CMOS_RD
AND high CMOS_CELL.ScreenSET.Mask.Sinc ; ¢ ॣ¨áâॠA §­ ç¥­¨¥ ScreenSET
jr z,.SetDefLines
bit 6,a
jr z,.set312lines
jr .Set320Lines
.old_mode:
AND A
JR Z,.INT_DEF
DEC A
JR Z,.INT_SCORP
DEC A
JR Z,.INT_PENT
DEC A
JR Z,.INT_ORIG
DEC A
JR Z,.INT_CMOS_SINC
; [x] ª á⮬­ë© íªà ­ ¯® â ¡«¨æ¥ ¯®«ì§®¢ â¥«ï
DEC A
JR Z,.PROG_SCR
;
.error: SCF
RET
.SetDefLines:
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
ld a,(SYS_PAGE.VSyncAndWaits)
OUT (C),B
and 1
jr z,.set312lines
jr .Set320Lines
.INT_DEF:
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
LD DE,(SYS_PAGE.CONFIG_ALL)
OUT (C),B
CALL Test_CONFIG_ALL
jr nz,.INT_CMOS_SINC
jp (IX)
.INT_CMOS_SINC:
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
LD DE,(SYS_PAGE.CONFIG_ALL)
OUT (C),B
LD D,CMOS_CELL.ScreenSET
CALL CMOS_RD
AND high CMOS_CELL.ScreenSET.Mask.Int ; ¢ ॣ¨áâॠA §­ ç¥­¨¥ ScreenSET
JR NZ,.skiptest
CALL Test_CONFIG_ALL
JP (IX) ; default int (non CMOS)
.skiptest:
cp #10
jr z,.INT_SCORP ; scorpion int
cp #20
jr z,.INT_PENT ; pentagon int
; jr ORIG_SINC ; original int
.INT_ORIG:
LD IX,SCREEN_TABLES.ORIGINAL
JR .PROG_SCR
.INT_SCORP:
LD IX,SCREEN_TABLES.SCORPION
JR .PROG_SCR
.INT_PENT:
LD IX,SCREEN_TABLES.PENTAGON
; JR PROG_SCR
.PROG_SCR:
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
EX AF,AF'
LD (SYS_PAGE.COPY_SLOT3),A
IN A,(PORT_Y)
LD (SYS_PAGE.COPY_RGADR),A
LD (SYS_PAGE.CONFIG_ALL),IX
XOR A
;----[START]-----------------------[? 1]
.loop_1:
OUT (PORT_Y),A
EX AF,AF'
LD A,#50
OUT (SLOT3),A
LD HL,#C300
;----[START]------------------[v 2]-----
.loop_2:
LD C,(IX)
;----[START]-------------[v 3]----------
.loop_3:
; ¢§ïâì  ¤à¥á ¤ ­­ëå ¤«ï § ¯¨á¨ ¢ á«ã¦¥¡­ãî ®¡« áâì íªà ­ 
LD E,(IX+1) ; take adress of line X
LD D,(IX+2)
;----[START]--------[v 4]---------------
.loop_4:
LD A,(DE) ; take counter in table 1, line X, column Y
INC DE
AND A
JR Z,.loop_4_exit ; exit if zero-counter
LD B,A
LD A,(DE)
INC DE
;----[START]---[v 5]--------------------
.loop_5:
LD (HL),A
INC L
LD (HL),0
INC L
LD (HL),0
EX AF,AF'
INC A
OUT (PORT_Y),A
EX AF,AF'
LD (HL),0
DEC L
LD (HL),0
DEC L
LD (HL),A
EX AF,AF'
INC A
OUT (PORT_Y),A
EX AF,AF'
DJNZ .loop_5
;--------------[^ 5]--------------------
JR .loop_4
;-------------------[^ 4]---------------
.loop_4_exit:
INC HL ; next line
INC HL
INC HL
INC HL
IN A,(PORT_Y)
AND #80
OUT (PORT_Y),A
DEC C
JR NZ,.loop_3
;------------------------[^ 3]----------
INC IX ; next counter
INC IX
INC IX
LD A,(IX)
AND A
JR NZ,.loop_2
;-----------------------------[^ 2]-----
LD A,SYS_PAGE
OUT (SLOT3),A
LD IX,(SYS_PAGE.CONFIG_ALL)
EX AF,AF'
ADD A,#80
JR NC,.loop_1
;----------------------------------[^ 1]
; Exit
LD A,(SYS_PAGE.COPY_RGADR)
OUT (PORT_Y),A
LD A,(SYS_PAGE.COPY_SLOT3)
OUT (SLOT3),A
.exit: OR A
RET
;DE - ᮤ¥à¦¨¬®¥ CONFIG_ALL
Test_CONFIG_ALL:
LD HL,SCREEN_TABLES.SCORPION
AND A
SBC HL,DE
ld IX,FN_SYNC.INT_SCORP
RET Z
LD HL,SCREEN_TABLES.ORIGINAL
AND A
SBC HL,DE
ld IX,FN_SYNC.INT_ORIG
RET Z
LD HL,SCREEN_TABLES.PENTAGON
AND A
SBC HL,DE
ld IX,FN_SYNC.INT_PENT
RET Z
and a
RET
;--- Screen data table 1: counter1, data1 .. counterX, dataX
SCREEN_TABLES:
;
; | ç¨á«® | §­ ç¥­¨ï |
; | áâப | ¢ |
; | /2 | áâப å |
.SCR: DB 41 , #F8
DB 3 , #FC
DB 4 , #FC
DB 7 , #FC
DB 9 , #F8
DB 0
;.SCR: DB 41,#F8, 3,#FC, 4,#FC, 7,#FC, 9,#F8, 0
.INT: DB 40,#FC, 2,#FD, 6,#FC, 7,#FC, 9,#FC, 0
.INT_SC: DB 41,#F8, 1,#FD, 6,#FC, 7,#FC, 9,#F8, 0
.BLN: DB 41,#FC, 3,#FC, 4,#FC, 7,#FC, 9,#FC, 0
.SNC: DB 41,#FC, 3,#FC, 4,#FC, 7,#FC, 9,#FC, 0
.RES: DB 41,#F8, 3,#FE, 4,#FE, 7,#FE, 9,#F8, 0
;---------------------------------------
;--- Screen data tables 2: counter1, data address1 .. counterX, data addressX
;
; | ª®«-¢® | §­ ç¥­¨ï |
; | áâப | ¢ |
; | | áâப¥ |
.PENTAGON: DB 33 : DW .SCR
DB 1 : DW .INT ; DW .BLN
DB 3 : DW .SNC
DB 1 : DW .BLN
DB 1 : DW .SCR
DB 1 : DW .RES
DB 0 ; end
.SCORPION: DB 31 : DW .SCR
DB 1 : DW .INT_SC
DB 1 : DW .SCR
DB 1 : DW .SNC
DB 3 : DW .SNC
DB 1 : DW .BLN
DB 2 : DW .RES
DB 0 ; end
.ORIGINAL: DB 33 : DW .SCR
DB 1 : DW .SNC
DB 1 : DW .INT
DB 2 : DW .SNC
DB 1 : DW .BLN
DB 1 : DW .SCR
DB 1 : DW .RES
DB 0 ; end
;---------------------------------------
FLEX_END:

170
Crazy BIOS/exp/FONT.ASM Normal file
View File

@ -0,0 +1,170 @@
; ‡­ ª®£¥­¥à â®à
LUA PASS1
fL = {}
for i = 1,16 do
fL[i]={}
end
-- 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
fL[1][1] = " -------- -######- -######- -##-##-- ---#---- --###--- ---#---- -------- ######## -------- ######## ----#### --####-- --###### -####### ---##--- "
fL[2][1] = " -------- #------# ######## #######- --###--- -#####-- ---#---- -------- ######## --####-- ##----## -----### -##--##- --##--## -##---## ##-##-## "
fL[3][1] = " -------- #-#--#-# ##-##-## #######- -#####-- --###--- --###--- ---##--- ###--### -##--##- #--##--# ----#### -##--##- --###### -####### --####-- "
fL[4][1] = " -------- #------# ######## #######- #######- #######- -#####-- --####-- ##----## -#----#- #-####-# -#####-# -##--##- --##---- -##---## ###--### "
fL[5][1] = " -------- #-####-# ##----## -#####-- -#####-- #######- #######- --####-- ##----## -#----#- #-####-# ##--##-- --####-- --##---- -##---## ###--### "
fL[6][1] = " -------- #--##--# ###--### --###--- --###--- ##-#-##- -#####-- ---##--- ###--### -##--##- #--##--# ##--##-- ---##--- -###---- -##--### --####-- "
fL[7][1] = " -------- #------# ######## ---#---- ---#---- ---#---- ---#---- -------- ######## --####-- ##----## ##--##-- -######- ####---- ###--##- ##-##-## "
fL[8][1] = " -------- -######- -######- -------- -------- --###--- --###--- -------- ######## -------- ######## -####--- ---##--- ###----- ##------ ---##--- "
-- 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
fL[1][2] = " #------- ------#- ---##--- -##--##- -####### --#####- -------- ---##--- ---##--- ---##--- -------- -------- -------- -------- -------- -------- "
fL[2][2] = " ###----- ----###- --####-- -##--##- ##-##-## -##---## -------- --####-- --####-- ---##--- ---##--- --##---- -------- --#--#-- ---##--- ######## "
fL[3][2] = " #####--- --#####- -######- -##--##- ##-##-## --###--- -------- -######- -######- ---##--- ----##-- -##----- ##------ -##--##- --####-- ######## "
fL[4][2] = " #######- #######- ---##--- -##--##- -####-## -##-##-- -------- ---##--- ---##--- ---##--- #######- #######- ##------ ######## -######- -######- "
fL[5][2] = " #####--- --#####- ---##--- -##--##- ---##-## -##-##-- -######- -######- ---##--- -######- ----##-- -##----- ##------ -##--##- ######## --####-- "
fL[6][2] = " ###----- ----###- -######- -------- ---##-## --###--- -######- --####-- ---##--- --####-- ---##--- --##---- #######- --#--#-- ######## ---##--- "
fL[7][2] = " #------- ------#- --####-- -##--##- ---##-## ##--##-- -######- ---##--- ---##--- ---##--- -------- -------- -------- -------- -------- -------- "
fL[8][2] = " -------- -------- ---##--- -------- -------- -####--- -------- ######## -------- -------- -------- -------- -------- -------- -------- -------- "
-- 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
fL[1][3] = " -------- --##---- -##-##-- -##-##-- --##---- -------- --###--- -##----- ---##--- -##----- -------- -------- -------- -------- -------- -----##- "
fL[2][3] = " -------- -####--- -##-##-- -##-##-- -#####-- ##---##- -##-##-- -##----- --##---- --##---- -##--##- --##---- -------- -------- -------- ----##-- "
fL[3][3] = " -------- -####--- -##-##-- #######- ##------ ##--##-- --###--- ##------ -##----- ---##--- --####-- --##---- -------- -------- -------- ---##--- "
fL[4][3] = " -------- --##---- -------- -##-##-- -####--- ---##--- -###-##- -------- -##----- ---##--- ######## ######-- -------- ######-- -------- --##---- "
fL[5][3] = " -------- --##---- -------- #######- ----##-- --##---- ##-###-- -------- -##----- ---##--- --####-- --##---- -------- -------- -------- -##----- "
fL[6][3] = " -------- -------- -------- -##-##-- #####--- -##--##- ##--##-- -------- --##---- --##---- -##--##- --##---- --##---- -------- --##---- ##------ "
fL[7][3] = " -------- --##---- -------- -##-##-- --##---- ##---##- -###-##- -------- ---##--- -##----- -------- -------- --##---- -------- --##---- #------- "
fL[8][3] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -##----- -------- -------- -------- "
-- 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
fL[1][4] = " -#####-- --##---- -####--- -####--- ---###-- ######-- --###--- ######-- -####--- -####--- -------- -------- ---##--- -------- -##----- -####--- "
fL[2][4] = " ##---##- -###---- ##--##-- ##--##-- --####-- ##------ -##----- ##--##-- ##--##-- ##--##-- --##---- --##---- --##---- -------- --##---- ##--##-- "
fL[3][4] = " ##--###- --##---- ----##-- ----##-- -##-##-- #####--- ##------ ----##-- ##--##-- ##--##-- --##---- --##---- -##----- ######-- ---##--- ----##-- "
fL[4][4] = " ##-####- --##---- --###--- --###--- ##--##-- ----##-- #####--- ---##--- -####--- -#####-- -------- -------- ##------ -------- ----##-- ---##--- "
fL[5][4] = " ####-##- --##---- -##----- ----##-- #######- ----##-- ##--##-- --##---- ##--##-- ----##-- -------- -------- -##----- -------- ---##--- --##---- "
fL[6][4] = " ###--##- --##---- ##--##-- ##--##-- ----##-- ##--##-- ##--##-- --##---- ##--##-- ---##--- --##---- --##---- --##---- ######-- --##---- -------- "
fL[7][4] = " -#####-- ######-- ######-- -####--- ---####- -####--- -####--- --##---- -####--- -###---- --##---- --##---- ---##--- -------- -##----- --##---- "
fL[8][4] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -##----- -------- -------- -------- -------- "
-- 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
fL[1][5] = " -#####-- --##---- ######-- --####-- #####--- #######- #######- --####-- ##--##-- -####--- ---####- ###--##- ####---- ##---##- ##---##- --###--- "
fL[2][5] = " ##---##- -####--- -##--##- -##--##- -##-##-- -##---#- -##---#- -##--##- ##--##-- --##---- ----##-- -##--##- -##----- ###-###- ###--##- -##-##-- "
fL[3][5] = " ##-####- ##--##-- -##--##- ##------ -##--##- -##-#--- -##-#--- ##------ ##--##-- --##---- ----##-- -##-##-- -##----- #######- ####-##- ##---##- "
fL[4][5] = " ##-####- ##--##-- -#####-- ##------ -##--##- -####--- -####--- ##------ ######-- --##---- ----##-- -####--- -##----- #######- ##-####- ##---##- "
fL[5][5] = " ##-####- ######-- -##--##- ##------ -##--##- -##-#--- -##-#--- ##--###- ##--##-- --##---- ##--##-- -##-##-- -##---#- ##-#-##- ##--###- ##---##- "
fL[6][5] = " ##------ ##--##-- -##--##- -##--##- -##-##-- -##---#- -##----- -##--##- ##--##-- --##---- ##--##-- -##--##- -##--##- ##---##- ##---##- -##-##-- "
fL[7][5] = " -####--- ##--##-- ######-- --####-- #####--- #######- ####---- --#####- ##--##-- -####--- -####--- ###--##- #######- ##---##- ##---##- --###--- "
fL[8][5] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- "
-- 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
fL[1][6] = " ######-- -####--- ######-- -####--- ######-- ##--##-- ##--##-- ##---##- ##---##- ##--##-- #######- -####--- ##------ -####--- ---#---- -------- "
fL[2][6] = " -##--##- ##--##-- -##--##- ##--##-- #-##-#-- ##--##-- ##--##-- ##---##- ##---##- ##--##-- ##---##- -##----- -##----- ---##--- --###--- -------- "
fL[3][6] = " -##--##- ##--##-- -##--##- -##----- --##---- ##--##-- ##--##-- ##---##- -##-##-- ##--##-- #---##-- -##----- --##---- ---##--- -##-##-- -------- "
fL[4][6] = " -#####-- ##--##-- -#####-- --##---- --##---- ##--##-- ##--##-- ##-#-##- --###--- -####--- ---##--- -##----- ---##--- ---##--- ##---##- -------- "
fL[5][6] = " -##----- ##-###-- -##-##-- ---##--- --##---- ##--##-- ##--##-- #######- --###--- --##---- --##--#- -##----- ----##-- ---##--- -------- -------- "
fL[6][6] = " -##----- -####--- -##--##- ##--##-- --##---- ##--##-- -####--- ###-###- -##-##-- --##---- -##--##- -##----- -----##- ---##--- -------- -------- "
fL[7][6] = " ####---- ---###-- ###--##- -####--- -####--- ######-- --##---- ##---##- ##---##- -####--- #######- -####--- ------#- -####--- -------- -------- "
fL[8][6] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- ######## "
-- 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
fL[1][7] = " --##---- -------- ###----- -------- ---###-- -------- --###--- -------- ###----- --##---- ----##-- ###----- -###---- -------- -------- -------- "
fL[2][7] = " --##---- -------- -##----- -------- ----##-- -------- -##-##-- -------- -##----- -------- -------- -##----- --##---- -------- -------- -------- "
fL[3][7] = " ---##--- -####--- -##----- -####--- ----##-- -####--- -##----- -###-##- -##-##-- -###---- ----##-- -##--##- --##---- ##--##-- #####--- -####--- "
fL[4][7] = " -------- ----##-- -#####-- ##--##-- -#####-- ##--##-- ####---- ##--##-- -###-##- --##---- ----##-- -##-##-- --##---- #######- ##--##-- ##--##-- "
fL[5][7] = " -------- -#####-- -##--##- ##------ ##--##-- ######-- -##----- ##--##-- -##--##- --##---- ----##-- -####--- --##---- #######- ##--##-- ##--##-- "
fL[6][7] = " -------- ##--##-- -##--##- ##--##-- ##--##-- ##------ -##----- -#####-- -##--##- --##---- ##--##-- -##-##-- --##---- ##-#-##- ##--##-- ##--##-- "
fL[7][7] = " -------- -###-##- ##-###-- -####--- -###-##- -####--- ####---- ----##-- ###--##- -####--- ##--##-- ###--##- -####--- ##---##- ##--##-- -####--- "
fL[8][7] = " -------- -------- -------- -------- -------- -------- -------- #####--- -------- -------- -####--- -------- -------- -------- -------- -------- "
-- 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
fL[1][8] = " -------- -------- -------- -------- ---#---- -------- -------- -------- -------- -------- -------- ---###-- ---##--- ###----- -###-##- -------- "
fL[2][8] = " -------- -------- -------- -------- --##---- -------- -------- -------- -------- -------- -------- --##---- ---##--- --##---- ##-###-- ---#---- "
fL[3][8] = " ##-###-- -###-##- ##-###-- -#####-- -#####-- ##--##-- ##--##-- ##---##- ##---##- ##--##-- ######-- --##---- ---##--- --##---- -------- --###--- "
fL[4][8] = " -##--##- ##--##-- -###-##- ##------ --##---- ##--##-- ##--##-- ##-#-##- -##-##-- ##--##-- #--##--- ###----- -------- ---###-- -------- -##-##-- "
fL[5][8] = " -##--##- ##--##-- -##--##- -####--- --##---- ##--##-- ##--##-- #######- --###--- ##--##-- --##---- --##---- ---##--- --##---- -------- ##---##- "
fL[6][8] = " -#####-- -#####-- -##----- ----##-- --##-#-- ##--##-- -####--- #######- -##-##-- -#####-- -##--#-- --##---- ---##--- --##---- -------- ##---##- "
fL[7][8] = " -##----- ----##-- ####---- #####--- ---##--- -###-##- --##---- -##-##-- ##---##- ----##-- ######-- ---###-- ---##--- ###----- -------- #######- "
fL[8][8] = " ####---- ---####- -------- -------- -------- -------- -------- -------- -------- #####--- -------- -------- -------- -------- -------- -------- "
-- 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
fL[1][9] = " ----###- ######-- #####--- ######-- -######- ######-- ##-##-## --####-- ##---##- ##-#-##- ##---##- -----##- ##---##- ##---##- -#####-- #######- "
fL[2][9] = " ---####- ##------ ##--##-- ##------ -##--##- ##------ ##-##-## -##--##- ##---##- ##---##- ##--##-- ----###- ###-###- ##---##- ##---##- ##---##- "
fL[3][9] = " --##-##- ##------ ##--##-- ##------ -##--##- ##------ -######- -----##- ##--###- ##--###- ##-##--- ---####- #######- ##---##- ##---##- ##---##- "
fL[4][9] = " -##--##- ######-- ######-- ##------ -##--##- #####--- ---##--- --####-- ##-####- ##-####- #####--- --##-##- ##-#-##- #######- ##---##- ##---##- "
fL[5][9] = " #######- ##---##- ##---##- ##------ -##--##- ##------ -######- -----##- ####-##- ####-##- ##--##-- -##--##- ##---##- ##---##- ##---##- ##---##- "
fL[6][9] = " ##---##- ##---##- ##---##- ##------ -##--##- ##------ ##-##-## ##---##- ###--##- ###--##- ##---##- ##---##- ##---##- ##---##- ##---##- ##---##- "
fL[7][9] = " ##---##- ######-- ######-- ##------ ######## #######- ##-##-## -#####-- ##---##- ##---##- ##---##- ##---##- ##---##- ##---##- -#####-- ##---##- "
fL[8][9] = " -------- -------- -------- -------- ##----## -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- "
-- 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
fL[1][10] = " ######-- -#####-- ######-- ##---##- ---##--- ##----## ##--##-- ##---##- ##-#-##- ##-#-##- ####---- ##----#- ##------ -#####-- ##--###- -######- "
fL[2][10] = " ##---##- ##---##- --##---- ##---##- -######- -##--##- ##--##-- ##---##- ##-#-##- ##-#-##- --##---- ##----#- ##------ ##---##- ##-##-## ##---##- "
fL[3][10] = " ##---##- ##------ --##---- ##---##- ##-##-## --####-- ##--##-- ##---##- ##-#-##- ##-#-##- --##---- ##----#- ##------ -----##- ##-##-## ##---##- "
fL[4][10] = " ######-- ##------ --##---- -######- ##-##-## ---##--- ##--##-- -######- ##-#-##- ##-#-##- --#####- ####--#- ######-- ---####- #####-## -######- "
fL[5][10] = " ##------ ##------ --##---- -----##- ##-##-## --####-- ##--##-- -----##- ##-#-##- ##-#-##- --##--## ##-##-#- ##---##- -----##- ##-##-## --##-##- "
fL[6][10] = " ##------ ##---##- --##---- ##---##- -######- -##--##- ##--##-- -----##- ##-#-##- ##-#-##- --##--## ##-##-#- ##---##- ##---##- ##-##-## -##--##- "
fL[7][10] = " ##------ -#####-- --##---- -#####-- ---##--- ##----## #######- -----##- #######- ######## --#####- ####--#- ######-- -#####-- ##--###- ##---##- "
fL[8][10] = " -------- -------- -------- -------- -------- -------- -----##- -------- -------- ------## -------- -------- -------- -------- -------- -------- "
-- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
fL[1][11] = " -------- -----#-- -------- -------- -------- -------- -------- -------- -------- --##---- -------- -------- -------- -------- -------- -------- "
fL[2][11] = " -------- -####--- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- "
fL[3][11] = " -####--- ##------ #####--- ######-- -######- -####--- ##-##-## -####--- ##--##-- ##--##-- ##--##-- ----###- ##---##- ##--##-- -####--- ######-- "
fL[4][11] = " ----##-- #####--- ##--##-- ##------ -##--##- ##--##-- -######- ##--##-- ##--##-- ##--##-- ##-##--- ---####- ###-###- ##--##-- ##--##-- ##--##-- "
fL[5][11] = " -#####-- ##--##-- #####--- ##------ -##--##- ######-- ---##--- ---##--- ##-###-- ##-###-- ####---- --##-##- ##-#-##- ######-- ##--##-- ##--##-- "
fL[6][11] = " ##--##-- ##--##-- ##---##- ##------ -##--##- ##------ -######- ##--##-- ###-##-- ###-##-- ##--##-- -##--##- ##---##- ##--##-- ##--##-- ##--##-- "
fL[7][11] = " -######- -####--- ######-- ##------ ######## -#####-- ##-##-## -####--- ##--##-- ##--##-- ##--##-- ##---##- ##---##- ##--##-- -####--- ##--##-- "
fL[8][11] = " -------- -------- -------- -------- ##----## -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- "
-- B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
fL[1][12] = " --#---#- -#-#-#-# ##-##-## ---#---- ---#---- ---#---- ---#-#-- -------- -------- ---#-#-- ---#-#-- -------- ---#-#-- ---#-#-- ---#---- -------- "
fL[2][12] = " #---#--- #-#-#-#- -###-### ---#---- ---#---- ---#---- ---#-#-- -------- -------- ---#-#-- ---#-#-- -------- ---#-#-- ---#-#-- ---#---- -------- "
fL[3][12] = " --#---#- -#-#-#-# ##-##-## ---#---- ---#---- ####---- ---#-#-- -------- ####---- ####-#-- ---#-#-- ######-- ####-#-- ---#-#-- ####---- -------- "
fL[4][12] = " #---#--- #-#-#-#- ###-###- ---#---- ---#---- ---#---- ---#-#-- -------- ---#---- -----#-- ---#-#-- -----#-- -----#-- ---#-#-- ---#---- -------- "
fL[5][12] = " --#---#- -#-#-#-# ##-##-## ---#---- ####---- ####---- ####-#-- ######-- ####---- ####-#-- ---#-#-- ####-#-- ######-- ######-- ####---- ####---- "
fL[6][12] = " #---#--- #-#-#-#- -###-### ---#---- ---#---- ---#---- ---#-#-- ---#-#-- ---#---- ---#-#-- ---#-#-- ---#-#-- -------- -------- -------- ---#---- "
fL[7][12] = " --#---#- -#-#-#-# ##-##-## ---#---- ---#---- ---#---- ---#-#-- ---#-#-- ---#---- ---#-#-- ---#-#-- ---#-#-- -------- -------- -------- ---#---- "
fL[8][12] = " #---#--- #-#-#-#- ###-###- ---#---- ---#---- ---#---- ---#-#-- ---#-#-- ---#---- ---#-#-- ---#-#-- ---#-#-- -------- -------- -------- ---#---- "
-- C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
fL[1][13] = " ---#---- ---#---- -------- ---#---- -------- ---#---- ---#---- ---#-#-- ---#-#-- -------- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#---- "
fL[2][13] = " ---#---- ---#---- -------- ---#---- -------- ---#---- ---#---- ---#-#-- ---#-#-- -------- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#---- "
fL[3][13] = " ---#---- ---#---- -------- ---#---- -------- ---#---- ---##### ---#-#-- ---#-### ---##### ####-### ######## ---#-### ######## ####-### ######## "
fL[4][13] = " ---#---- ---#---- -------- ---#---- -------- ---#---- ---#---- ---#-#-- ---#---- ---#---- -------- -------- ---#---- -------- -------- -------- "
fL[5][13] = " ---##### ######## ######## ---##### ######## ######## ---##### ---#-### ---##### ---#-### ######## ####-### ---#-### ######## ####-### ######## "
fL[6][13] = " -------- -------- ---#---- ---#---- -------- ---#---- ---#---- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#-#-- -------- ---#-#-- -------- "
fL[7][13] = " -------- -------- ---#---- ---#---- -------- ---#---- ---#---- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#-#-- -------- ---#-#-- -------- "
fL[8][13] = " -------- -------- ---#---- ---#---- -------- ---#---- ---#---- ---#-#-- -------- ---#-#-- -------- ---#-#-- ---#-#-- -------- ---#-#-- -------- "
-- D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
fL[1][14] = " ---#-#-- -------- -------- ---#-#-- ---#---- -------- -------- ---#-#-- ---#---- ---#---- -------- ######## -------- ####---- ----#### ######## "
fL[2][14] = " ---#-#-- -------- -------- ---#-#-- ---#---- -------- -------- ---#-#-- ---#---- ---#---- -------- ######## -------- ####---- ----#### ######## "
fL[3][14] = " ---#-#-- ######## -------- ---#-#-- ---##### ---##### -------- ---#-#-- ######## ---#---- -------- ######## -------- ####---- ----#### ######## "
fL[4][14] = " ---#-#-- -------- -------- ---#-#-- ---#---- ---#---- -------- ---#-#-- ---#---- ---#---- -------- ######## -------- ####---- ----#### ######## "
fL[5][14] = " ######## ######## ######## ---##### ---##### ---##### ---##### ######## ######## ####---- ---##### ######## ######## ####---- ----#### -------- "
fL[6][14] = " -------- ---#---- ---#-#-- -------- -------- ---#---- ---#-#-- ---#-#-- ---#---- -------- ---#---- ######## ######## ####---- ----#### -------- "
fL[7][14] = " -------- ---#---- ---#-#-- -------- -------- ---#---- ---#-#-- ---#-#-- ---#---- -------- ---#---- ######## ######## ####---- ----#### -------- "
fL[8][14] = " -------- ---#---- ---#-#-- -------- -------- ---#---- ---#-#-- ---#-#-- ---#---- -------- ---#---- ######## ######## ####---- ----#### -------- "
-- F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
fL[1][15] = " -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- "
fL[2][15] = " -------- -------- -------- -------- ---##--- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- "
fL[3][15] = " #####--- -####--- ######-- ##--##-- -######- ##---##- ##--##-- ##--##-- ##-#-##- ##-#-##- ####---- ##----#- ##------ -#####-- ##--###- -#####-- "
fL[4][15] = " ##--##-- ##--##-- --##---- ##--##-- ##-##-## -##-##-- ##--##-- ##--##-- ##-#-##- ##-#-##- --##---- ##----#- ##------ ##---##- ##-##-## ##--##-- "
fL[5][15] = " ##--##-- ##------ --##---- -#####-- ##-##-## --###--- ##--##-- -#####-- ##-#-##- ##-#-##- --#####- ####--#- #####--- ---####- #####-## -#####-- "
fL[6][15] = " #####--- ##--##-- --##---- ----##-- -######- -##-##-- ##--##-- ----##-- ##-#-##- ##-#-##- --##--## ##-##-#- ##--##-- ##---##- ##-##-## -##-##-- "
fL[7][15] = " ##------ -####--- --##---- ##--##-- ---##--- ##---##- #######- ----##-- #######- ######## --#####- ####--#- #####--- -#####-- ##--###- ##--##-- "
fL[8][15] = " ##------ -------- -------- -####--- ---##--- -------- -----##- -------- -------- ------## -------- -------- -------- -------- -------- -------- "
-- E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
fL[1][16] = " -#--#--- -#--#--- -##----- ---##--- ----#--- ---#---- --##---- -------- -##----- -------- -------- ---##### #-#----- -##----- -------- -------- "
fL[2][16] = " ######-- -------- --##---- --##---- ---#-#-- ---#---- --##---- -------- #--#---- -------- -------- ---#---- ##-#---- #--#---- -------- -------- "
fL[3][16] = " ##------ -####--- ---##--- -##----- ---#---- ---#---- -------- -##--#-- #--#---- -------- -------- ---#---- #--#---- --#----- --####-- -------- "
fL[4][16] = " #####--- ##--##-- --##---- --##---- ---#---- ---#---- ######-- #--##--- -##----- --##---- -------- #--#---- #--#---- -#------ --####-- -------- "
fL[5][16] = " ##------ ######-- -##----- ---##--- ---#---- ---#---- -------- -------- -------- --##---- --##---- -#-#---- #--#---- ####---- --####-- -------- "
fL[6][16] = " ##------ ##------ -------- -------- ---#---- -#-#---- --##---- -##--#-- -------- -------- -------- --##---- -------- -------- --####-- -------- "
fL[7][16] = " #######- -#####-- -####--- -####--- ---#---- --#----- --##---- #--##--- -------- -------- -------- ---#---- -------- -------- -------- -------- "
fL[8][16] = " -------- -------- -------- -------- ---#---- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- "
ENDLUA
LUA ALLPASS
for i = 1, 8 do
for j = 1, 16, 1 do
_pc(" DG " .. fL[i][j])
end
end
ENDLUA
;

905
Crazy BIOS/exp/FUNC_4x.ASM Normal file
View File

@ -0,0 +1,905 @@
;
MACRO WAIT_HDD
LD BC,IDE.Read.Status
.loop: IN A,(C)
BIT IDE.ControlBit.Busy,A
JR NZ,.loop
ENDM
;______________________________________________________________________:
;
; GET_BPB_OFFSET:
; ;LD A,SYS_PAGE
; ;LD HL,MS_BPB
; PUSH AF
; PUSH HL
; LD B,1
; LD IX,#0000
; LD DE,#0000
; CALL FN_HDD_READ
; POP IX
; POP AF
; PUSH AF
; PUSH IX
; LD DE,#01BE ;!HARDCODE ᬥ饭¨¥ ®â ­ ç «  ᥪâ®à  ¤«ï â ¡«¨æë à §¤¥«®¢
; ADD IX,DE
; ;
; EX AF,AF'
; IN A,(SLOT3)
; EX AF,AF'
; OUT (SLOT3),A
; ;
; LD E,(IX+8) ; ¯¥à¢ë© ᥪâ®à (LBA) ­ ç «  à §¤¥«  (DWORD)
; LD D,(IX+9)
; LD L,(IX+10)
; LD H,(IX+11)
; ;
; EX AF,AF'
; OUT (SLOT3),A
; EX AF,AF'
; ;
; PUSH HL
; POP IX
; POP HL
; POP AF
; RET
HD_BPB_PREP:
; [x] 27/01/2024 ⥯¥àì ०¨¬ ᯥªâà㬠 à ¡®â ¥â á «î¡ë¬ à §¤¥«®¬ HDD
;LD D,A
;IN A,(SLOT3)
;EX AF,AF'
; LD A,SYS_PAGE
; OUT (SLOT3),A
; LD A,(SYS_PAGE.HD_IDF_ADR.sectors)
; LD E,A
;EX AF,AF'
;OUT (SLOT3),A
;LD A,D
;LD D,#00
;LD IX,#0000
;LD B,#01
LD B,A
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(SYS_PAGE.CURRENT_HDD)
INC A
JR NZ,.configured
;
LD A,(SYS_PAGE.HD_IDF_ADR.sectors)
LD E,A
LD D,#00
LD IX,#0000
JR .done
;
.configured:
LD IX,(SYS_PAGE.HDD_PARTITION_OFFSET+2)
LD DE,(SYS_PAGE.HDD_PARTITION_OFFSET)
.done: EX AF,AF'
OUT (SLOT3),A
LD A,B
LD B,#01
;
HD_PREPARE:
PUSH AF
PUSH HL
CALL HD_CALC_SECS
JR C,.error
;
LD A,B
LD BC,IDE.Write.Counter ; “áâ ­®¢¨âì ç¨á«® ᥪâ®à®¢ ¤«ï § ¯¨á¨
OUT (C),A
IF IDE_Optimization
INC C
OUT (C),L
INC C
OUT (C),E
INC C
OUT (C),D
ELSE
LD BC,IDE.Write.Sector
OUT (C),L ; …ŠŽ<E28099>
LD BC,IDE.Write.CylinderLow
OUT (C),E ; ¤®à®¦ª  low
LD BC,IDE.Write.CylinderHigh
OUT (C),D ; ¤®à®¦ª  high
ENDIF
LD BC,IDE.Read.Control
IN A,(C)
AND #F0 ; !!!!! ¯®á¬®âà¥âì
OR H
INC B ; IDE.Write.DeviceHead
OUT (C),A
POP HL ; BUFER & PAGE
POP AF
AND A
RET
;
.error: POP HL
POP AF
SCF
RET
NEXT_ADD_SEC:
PUSH AF
LD A,B
LD BC,IDE.Write.Counter ; “áâ ­®¢¨âì ç¨á«® ᥪâ®à®¢ ¤«ï § ¯¨á¨
OUT (C),A
IF IDE_Optimization
DEC B
INC C
IN A,(C) ; IDE.Read.Sector
ADC A,E
INC B
OUT (C),A ; IDE.Write.Sector
DEC B
INC C
IN A,(C) ; IDE.Read.CylinderLow
ADC A,D
INC B
OUT (C),A ; IDE.Write.CylinderLow
DEC B
INC C
IN A,(C) ; IDE.Read.CylinderHigh
ADC A,0
INC B
OUT (C),A ; IDE.Write.CylinderHigh
LD BC,IDE.Read.Control
IN A,(C)
ELSE
LD BC,IDE.Read.Sector
IN A,(C)
ADC A,E
INC B
OUT (C),A ; IDE.Write.Sector
LD BC,IDE.Read.CylinderLow
IN A,(C)
ADC A,D
INC B
OUT (C),A ; IDE.Write.CylinderLow
LD BC,IDE.Read.CylinderHigh
IN A,(C)
ADC A,0
INC B
OUT (C),A ; IDE.Write.CylinderHigh
LD BC,IDE.Read.Control
IN A,(C)
ENDIF
LD D,A
ADC A,0
AND #0F
LD E,A
LD A,D
AND #F0
OR E
INC B
OUT (C),A ; IDE.Write.DeviceHead
POP AF
RET
; <20>ਠ¨á¯®«­¥­¨¨ ¯à®¨§¢®¤¨âáï ¢áï ¯®¤£®â®¢ª  ª
; ®¯¥à æ¨ï¬ ç⥭¨ï/§ ¯¨á¨ ¢ëç¨á«¥­¨¥
; 樫¨­¤à®¢/£®«®¢®ª/ᥪâ®à®¢ ¨ § ­¥á¥­¨¥ ¨å ¢ ॣ¨áâàë ¢¨­ç¥áâ¥à 
; ¤ «¥¥ ¯à®£à ¬¬  ¬®¦¥â á ¬  ⮫쪮 ¯®¤ âì ª®¬ ­¤ã ç¨â âì/¯¨á âì ¨
; á ¬®áâ®ï⥫쭮 ¯à®¨§¢®¤¨âì áç¨â뢠­¨¥/§ ¯¨áì ¤ ­­ëå ¢ ¢¨­ç¥áâ¥à.
; Š®¬ ­¤  㤮¡­  ¤«ï à ¡®âë ¯à®£à ¬¬ ¢ ॠ«ì­®¬ ¢à¥¬¥­¨, ª®£¤  ­¥®¡å®¤¨¬®
; ªà®¬¥ ç⥭¨ï/§ ¯¨á¨ ¤ ­­ëå ¯à®¨§¢®¤¨âì ª ª¨¥ «¨¡® ¨­ë¥ ¤¥©á⢨ï.
FN_HDD_PREPARE: ; <20>Ž„ƒŽŽŠ€ Š <>˜<E280A6>ˆŒ Ž<><EFBFBD>ˆŸŒ R/W
AND A ; ç⮡ á¡à®á¨âì CF ¥á«¨ ®­ á⮨⠨ B=0
INC B
DEC B
RET Z
CALL HD_WAIT
RET C
CALL HD_PREPARE
RET C
; [x]
EX AF,AF'
LD A,#BF ; check buffer address in SLOT3
SUB H
JR C,.SetCommand
EX AF,AF'
SAFE_PORTY
EXX
LD C,SLOT3
IN B,(C)
EXX
OUT (SLOT3),A
EX AF,AF'
.SetCommand:
LD BC,IDE.Write.Command
LD A,IDE.ATA.ReadSectorsWithRetry
; OUT (C),A
AND A
RET
FN_HDD_READ_BPB:
CALL HD_WAIT
RET C
CALL HD_BPB_PREP
JR NC,FN_HDD_READ.L1
RET
; FOR LBA ONLY - NEXT_READ
; HL - bufer, A - page
; B - numer of sectors
; DE - add_par (next+DE) (d.b. 1 for NEXT)
FN_HDD_READ_NEXT:
AND A
INC B
DEC B
RET Z ; ret if 0 sectors
CALL HD_WAIT
RET C
CALL NEXT_ADD_SEC
JR FN_HDD_READ.L1
;
; HL - BUFER, A - PAGE
FN_HDD_READ:
AND A
INC B
DEC B
RET Z
CALL HD_WAIT
CALL NC,HD_PREPARE
RET C
.L1: EXX
LD C,SLOT3
IN B,(C)
EXX
OUT (SLOT3),A
EX AF,AF'
;
SAFE_PORTY
;
LD BC,IDE.Write.Command
LD A,IDE.ATA.ReadSectorsWithRetry
OUT (C),A
.L2: WAIT_HDD
;BIT IDE.ControlBit.DataRequest,A
AND IDE.ControlByte.DataRequest
JR Z,.RET_PortY
;
;HD_READ_CONT
LD BC,IDE.Read.Data
.loop_read1:
DUP 16
INI ; ¢á¥£® 16 à § INI - ®¯â¨¬ «ì­®.
EDUP
JR NZ,.loop_read1
.loop_read2:
DUP 16
INI ; ¢á¥£® 16 à § INI - ®¯â¨¬ «ì­®.
EDUP
JR NZ,.loop_read2
;
LD A,H
OR L
JR NZ,.L2
;
LD A,SYS_PAGE
OUT (SLOT3),A
EX AF,AF'
LD H,high SYS_PAGE.RAMD_FAT
LD L,A
LD A,(HL)
OUT (SLOT3),A
EX AF,AF'
LD HL,#C000
JR .L2
;
.RET_PortY:
ZERO_PORTY
;
HD_RET: EXX
OUT (C),B
EXX
LD BC,IDE.Read.Error
IN A,(C)
AND A
SCF
RET NZ
;
EX AF,AF'
AND A
RET
; HL - BUFER, A - PAGE
FN_HDD_WRITE:
AND A
INC B
DEC B
RET Z
CALL HD_WAIT
RET C
CALL HD_PREPARE
RET C
EXX
LD C,SLOT3
IN B,(C)
EXX
OUT (SLOT3),A
EX AF,AF'
LD BC,IDE.Write.Command
LD A,IDE.ATA.WriteSectorsWithRetry
OUT (C),A
HD_WR_L2:
WAIT_HDD
BIT IDE.ControlBit.DataRequest,A
JR Z,HD_RET
LD BC,IDE.Write.Data
LD D,32 ;!HARDCODE § ¢¨á¨â ®â áçñâ稪  DUP ¢ HD_WR_LOOP
HD_WR_LOOP:
DUP 16
OUTI ; ¢á¥£® 16 à § OUTI - ®¯â¨¬ «ì­®.
EDUP
DEC D
JR NZ,HD_WR_LOOP
LD A,H
OR L
JR NZ,HD_WR_L2
LD A,SYS_PAGE
OUT (SLOT3),A
EX AF,AF'
LD H,high SYS_PAGE.RAMD_FAT
LD L,A
LD A,(HL)
OUT (SLOT3),A
EX AF,AF'
LD HL,#C000 ; !HARDCODE
JR HD_WR_L2
;!FIXIT ¯®ª  à ¡®â ¥â ⮫쪮 á ®¤­¨¬ ª ­ «®¬ (¯®-áâ à®¬ã)
FN_HDD_RECAL:
LD A,IDE.Drive.Master
LD BC,IDE.Write.DeviceHead
OUT (C),A
LD A,IDE.ATA.ExecuteDeviceDiagnostic
CALL HD_CMD_EXE
;AND A
CP IDE.ControlByte.Error
RET Z
LD BC,IDE.Read.Error
IN A,(C)
CP 1 ; !HARDCODE
RET Z
SCF
RET
;????? £«ï­ãâì
; RET C
; LD A,#1F ; RECALIBRATE
; CALL HD_CMD_EXE
; RET
; [x] 28/01/2024 à ¡®â ¥â á® ¢á¥¬¨ ª ­ « ¬¨
FN_HDD_TEST_IDE:
LD E,#00
; TEST Secondary Chanel
LD A,IDE.Chanel.Secondary
OUT (IDE.Chanel.Set),A
CALL .TEST_CHANEL
SLA E
SLA E
; TEST Primary Chanel
LD A,IDE.Chanel.Primary
OUT (IDE.Chanel.Set),A
CALL .TEST_CHANEL
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; LD BC,IDE.Write.DeviceHead
; LD A,IDE.Drive.Master
; OUT (C),A
; ;
; CALL TEST_HDD_DRV
; ;
; JR NZ,.NO_HDD1
; SET 0,E
; .NO_HDD1:
; LD BC,IDE.Write.DeviceHead
; LD A,IDE.Drive.Slave
; OUT (C),A
; ;
; CALL TEST_HDD_DRV
; ;
; JR NZ,.NO_HDD2
; SET 1,E
; .NO_HDD2:
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,(SYS_PAGE.CURRENT_HDD)
OUT (C),B
CP #FF
JR Z,.exit
AND 1
JR Z,.exit
LD A,IDE.Chanel.Secondary
OUT (IDE.Chanel.Set),A
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.exit: LD A,E
AND A
SCF
RET Z ; HDD absent !
AND A
RET
.TEST_CHANEL:
LD BC,IDE.Write.DeviceHead
LD A,IDE.Drive.Master
OUT (C),A
;
CALL TEST_HDD_DRV
;
JR NZ,.NO_HDD1
SET 0,E
.NO_HDD1:
LD BC,IDE.Write.DeviceHead
LD A,IDE.Drive.Slave
OUT (C),A
;
CALL TEST_HDD_DRV
;
RET NZ
SET 1,E
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;-----------------------------------[DIFFERENT]
; <20>¥ ¤®«¦­  ¯®àâ¨âì ॣ¨áâà E!!!
TEST_HDD_DRV:
; EXP_HDD.ASM variant
LD HL,#01FE
LD BC,IDE.Write.Counter
OUT (C),L
IF IDE_Optimization
INC C
OUT (C),H ; IDE.Write.Sector
;
DEC C
DEC B
IN A,(C) ; IDE.Read.Counter
CP L
RET NZ
INC C
ELSE
LD BC,IDE.Write.Sector
OUT (C),H
LD BC,IDE.Read.Counter
IN A,(C)
CP L
RET NZ
LD BC,IDE.Read.Sector
ENDIF
IN A,(C) ; IDE.Read.Sector
CP H
RET
; TEST_HDD_DRV:
; ; EXTENDED.ASM variant
; LD HL,#00FF
; LD BC,IDE.Write.CylinderLow
; OUT (C),L
; IF IDE_Optimization
; INC C
; OUT (C),H ; IDE.Write.CylinderHigh
; INC B
; DEC C
; IN A,(C) ; ’ãâ ॣ¨áâà BC = #0254 - .CylinderLow
; CP L
; RET NZ
; INC C
; ELSE
; LD BC,IDE.Write.CylinderHigh
; OUT (C),H
; LD BC,#0254
; IN A,(C)
; CP L
; RET NZ
; LD BC,#0255
; ENDIF
; IN A,(C) ; ’ãâ ॣ¨áâà BC = #0255 - .CylinderHigh
; CP H
; RET
; [x] 07/01/2024 bit0 - master/slave, bit1: Primary/Secondary, bit2..3: ¨á¯®«ì§ãî騩áï à §¤¥« ¢ MBR
; !TODO ᤥ« âì à ¡®âã á ¯¥à¥¬¥­­ë¬¨ ¡¨®á  SYS_PAGE.IDE_0..3
FN_HDD_PART:
DI
PUSH BC
PUSH HL
;
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'
;
LD C,A
AND 2
LD A,IDE.Chanel.Primary
JR Z,.SET_CH
LD A,IDE.Chanel.Secondary
.SET_CH:
OUT (IDE.Chanel.Set),A
;
LD A,C
PUSH AF
AND 1
;
LD A,IDE.Drive.Slave
JR NZ,.SET_Master_Slave
;
LD A,IDE.Drive.Master
.SET_Master_Slave:
LD BC,IDE.Write.DeviceHead
OUT (C),A
CALL TEST_HDD_DRV
JR NZ,.Error
;
CALL FN_HDD_INIT.L3
JR C,.Error
;
POP BC
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,B
LD (SYS_PAGE.CURRENT_HDD),A
;
EX AF,AF'
OUT (SLOT3),A
;
CALL SET_BPB_OFFSET
.exit: POP HL
POP BC
EI
RET
;
.Error: POP AF
SCF
JR .exit
; [x] 27/01/2024  ¤ ¯â¨à®¢ ­  ¤«ï ª®à४⭮© à ¡®âë á FN_HDD_PART
FN_HDD_INIT:
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,(SYS_PAGE.CURRENT_HDD)
OUT (C),B
INC A
JR Z,FN_HDD_PART
; !FIXIT ᤥ« âì âãâ ¢ë¡®à ¯¥à¢®£® ¯®¯ ¢è¥£®áï ¨§ SYS.IDE_0-3
CALL TEST_HDD_DRV
SCF
RET NZ
; LD BC,IDE.Write.DeviceHead
; LD A,IDE.Drive.Master
; OUT (C),A
; CALL TEST_HDD_DRV
; JR NZ,.ABSENT
;
.L3: WAIT_HDD
LD BC,IDE.Write.Command
LD A,IDE.ATA.IdentifyDevice ;!FIXIT ¯¥à¥¤¥« âì
OUT (C),A
WAIT_HDD
AND IDE.ControlByte.DataRequest
;JR NZ,.L2
SCF
RET Z
;JR NZ,.L2
;SCF
;RET
; .ABSENT:
; LD BC,IDE.Write.DeviceHead
; LD A,IDE.Drive.Slave
; OUT (C),A
; CALL TEST_HDD_DRV
; JR Z,.L3
; SCF
; RET
;
;.L2:
LD BC,IDE.Read.Data
LD HL,SYS_PAGE.HD_IDF_ADR
IN A,(SLOT3)
LD D,A
LD A,SYS_PAGE
OUT (SLOT3),A
INIR
INIR
; B = 0
LD H,B
LD L,B
LD A,(SYS_PAGE.HD_IDF_ADR.sectors) ; ç¨á«® ᥪâ®à®¢
LD C,A
;LD HL,0
;LD B,H
LD A,(SYS_PAGE.HD_IDF_ADR.heads) ; ç¨á«® £®«®¢®ª
.loop: ADD HL,BC
DEC A
JR NZ,.loop
LD (SYS_PAGE.HD_IDF_ADR.sec_cyl),HL
WAIT_HDD
LD BC,IDE.Read.Control
IN A,(C)
AND #10
LD B,A
LD A,(SYS_PAGE.HD_IDF_ADR.heads) ; ç¨á«® £®«®¢®ª
DEC A
AND #0F
OR IDE.Drive.Master
OR B
LD H,A
LD A,(SYS_PAGE.HD_IDF_ADR.LBA_CHS)
;BIT 1,A
AND %0000'0010
JR Z,.NO_LBA
SET 6,H
.NO_LBA:
LD BC,IDE.Write.DeviceHead
OUT (C),H
LD A,(SYS_PAGE.HD_IDF_ADR.sectors) ; ç¨á«® ᥪâ®à®¢
.HDD_CONFIGURED:
LD BC,IDE.Write.Counter
OUT (C),A
LD A,D
OUT (SLOT3),A
LD A,IDE.ATA.InitializeDeviceParameters ; SET HDD PARAMETERS
;CALL HD_CMD_EXE
;RET
HD_CMD_EXE:
CALL HD_WAIT
RET C
LD BC,IDE.Write.Command
OUT (C),A
HD_WAIT:
PUSH DE
PUSH BC
PUSH AF
LD DE,0
.loop: LD BC,IDE.Read.Status
IN A,(C)
AND IDE.ControlByte.Busy
JR Z,.EXIT
DEC DE
LD A,D
OR E
JR NZ,.loop
POP AF
POP BC
POP DE
SCF
RET
;
.EXIT: POP AF
POP BC
POP DE
AND A
RET
; ;EXTENDED.ASM Version
; HDD_LBA: ;???!!!!
; POP BC
; LD L,E
; LD E,D
; LD D,XL
; XOR A
; LD H,A
; RET
; HD_CALC_SECS:
; LD A,XH
; AND A
; SCF
; RET NZ ; ®è¨¡ª , ᫨誮¬ ¡®«ì让 HDD
; PUSH BC
; LD BC,IDE.Write.DeviceHead
; DEC B
; IN A,(C)
; BIT 6,A
; JR NZ,HDD_LBA
; ; POP BC
;EXP_HDD.ASM Version
HD_CALC_SECS:
PUSH BC
LD BC,IDE.Read.Control
IN A,(C)
AND %0100'0000
POP BC
JR Z,.CHS
; LBA
LD L,E
LD E,D
LD D,XL
LD A,XH
AND #0F ; LBA 28
LD H,A
RET
; CHS
.CHS: LD A,XH
AND A
SCF
RET NZ ; ®è¨¡ª , ᫨誮¬ ¡®«ì让 HDD
; IX,DE -  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à 
PUSH IX
POP HL
;
IN A,(SLOT3)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,C
LD (SYS_PAGE.COPY_SLOT3),A
; HL,DE - ­®¬¥à ᥪâ®à 
; BC - ç¨á«® ᥪâ®à®¢ ­  樫¨­¤à¥
LD BC,(SYS_PAGE.HD_IDF_ADR.sec_cyl) ; ç¨á«® ᥪâ®à®¢ ­  樫¨­¤à¥
LD A,16 ; HL,DE à §¤¥«¨âì ­  BC
SCF
.DIV_LOOP:
EX DE,HL
ADD HL,HL
EX DE,HL
ADC HL,HL
;
SBC HL,BC ; áà ¢­¨âì HL ¨ BC
JR NC,.NO_ADD ; ¯¥à¥­®á  ­¥ ¡ë«® - +1!
ADD HL,BC
DEC A
JR NZ,.DIV_LOOP
JR .DIV_END
.NO_ADD:
INC DE
DEC A
JR NZ,.DIV_LOOP
.DIV_END:
; DE - १ã«ìâ â, HL - ®áâ â®ª
; DE - 樫¨­¤à
LD A,(SYS_PAGE.HD_IDF_ADR.sectors)
; A - ç¨á«® ᥪâ®à®¢ ­  ¤®à®¦ª¥
; HL - ­®¬¥à ᥪâ®à  ¢ 樫¨­¤à¥
LD C,A
;LD BC,(MS_BPB+S_P_T) ; —ˆ‘‹Ž …ŠŽ<E28099>Ž <20>€ „Ž<E2809E>ކЅ
XOR A
LD B,A
.LOOP: SBC HL,BC
INC A
JR NC,.LOOP
;
DEC A ; A - £®«®¢ª 
ADD HL,BC ; L - ᥪâ®à
INC L
LD H,A ; HL - HEAD,SEC
;
LD A,(SYS_PAGE.COPY_SLOT3)
OUT (SLOT3),A
AND A
RET
; [x] 27/01/2024 ⥯¥àì ०¨¬ ᯥªâà㬠 à ¡®â ¥â á «î¡ë¬ à §¤¥«®¬ HDD
SET_BPB_OFFSET:
LD A,SYS_PAGE
LD HL,SYS_PAGE.MS_BPB
LD IX,#0000
LD DE,#0000
LD B,1
CALL FN_HDD_READ
;
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'
OUT (SLOT3),A
;
LD A,(SYS_PAGE.CURRENT_HDD)
RRCA
RRCA
AND 3
INC A
LD B,A
;
; ; ᬥ饭¨¥ ®â ­ ç «  ᥪâ®à  ¤«ï â ¡«¨æë à §¤¥«®¢ c ¯¥à¢ë¬ ᥪâ®à®¬ LBA ¤«ï ¯¥à¢®£® à §¤¥« 
LD HL,SYS_PAGE.MS_BPB - _sMBR_PARTITION_RECORD + _sBOOT_SECTOR.PARTITION_TABLE
LD DE,_sMBR_PARTITION_RECORD
.loop: ADD HL,DE
DJNZ .loop
;
LD A,_sMBR_PARTITION_RECORD.Start_LBA
ADD L
LD L,A
LD DE,SYS_PAGE.HDD_PARTITION_OFFSET
LD C,_sMBR_PARTITION_RECORD.Size_LBA - _sMBR_PARTITION_RECORD.Start_LBA
LDIR
; [x] 07/07/2024 fix bug with select empty partition record
EX DE,HL
XOR A
LD B,_sMBR_PARTITION_RECORD.Size_LBA - _sMBR_PARTITION_RECORD.Start_LBA
.loop2: DEC HL
OR (HL)
DJNZ .loop2
SUB 1
;
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
RET
; ENDMODULE
;************************************************
; ?????
; DB 'HDD_DRV_END'
; ‚室:
; C - ª®¬ ­¤ 
; 0 - INIT - ¢å®¤­ëå ¯ à ­¥â => A - ç¨á«® ¯®¤¤¥à¦¨¢ ¥¬ëå ¤¨áª®¢.
; 1 - RESET - ¢ë¡®à ¤¨áª  A - ­®¬¥à ¤¨áª  ®â 0 =>
; 2 - (STATUS) !!!!! TEST?
; 3 - MEDIA CHECK - A - ­®¬¥à ¤¨áª  => A = 0 - old. #FF - new (¢á¥£¤  #FF) !!!!! PREPARE???
; 4 - READ BPB - A - ¤¨áª HL -  ¤à¥á ¢ ⥪ã饩 áâà ­¨æ¥.
; 5 - READ - A - ¤¨áª, IX:DE ᥪâ®à, HL -  ¤à¥á, B - ç¨á«® ᥪâ®à®¢
; 6 - WRITE - '' -
; 7 - PART
; 8 - READ_NEXT
;
; ®è¨¡ª¨ - CF - A - ®è¨¡ª 
;
; 0 - ­¥â ®è¨¡ª¨
; 1 - ­¥¢¥à­ ï ª®¬ ­¤ 
; 2 - ­¥¢¥à­ë© ­®¬¥à ¤¨áª 
; 3 - ­¥¢¥à­ë© ä®à¬ â (­¥ MS-DOS)
; 4 - ­¥â £®â®¢­®áâ¨
; 5 - ®è¨¡ª  ¯®§¨æ¨®­¨à®¢ ­¨ï
; 6 - ᥪâ®à ­¥ ­ ©¤¥­
; 7 - ®è¨¡ª  CRC
; 8 - § é¨â  § ¯¨á¨
; 9 - ®è¨¡ª  ç⥭¨ï
; 10 - ®è¨¡ª  § ¯¨á¨
; 11 - ƒ‹žŠ
;

128
Crazy BIOS/exp/FUNC_5x.asm Normal file
View File

@ -0,0 +1,128 @@
;
; It's disk drive BIOS extender for functions 5xh.
;---------------------------------------------------------------
;Version! Description
;---------------------------------------------------------------
; 2.32 ! Removed `DI' Disabled Interupt instruction in HDRIVER6
; ! function load sectors.
; ! Fixed bug waiting slave device in AUTOIDE.
;
;INT_ADRESS EQU #C124
;INT_PAGE EQU #C126
;INT_ID EQU #C127
;BIOS EQU #3FD0
; DS #3FD0,#FF
DRV_VERSION:
LD HL,0
LD BC,0
LD DE,Disk_subsystem_ver_hex
AND A
RET
DRV_LIST:
IN A,(SLOT3)
PUSH AF
PUSH IY
LD A,SYS_PAGE
OUT (SLOT3),A ; !TODO ᤥ« âì áâàãªâãன
LD (IX+0),#04 ; DB 0 ;LEN ;!HARDCODE
LD (IX+1),#00 ; DB 0 ;FDD COUNT
LD (IX+2),#00 ; DB 0 ;HDD COUNT
LD (IX+3),#00 ; DB 0 ;CDROM COUNT
; ; BLOCK 28,0 ;RESERVED ;!TODO ᤥ« âì RAMDRIVE âãâ?
LD (IX+4),#00 ; END FLAG
;Calculating FDD devices
LD HL,FDD_INI_TABLE.FDD_0
INC (IX+1)
LD B,8
LD A,#FF
.TFD0:
CP (HL)
INC HL
JR NZ,.YYYFD0
DJNZ .TFD0
DEC (IX+1)
.YYYFD0:
LD HL,FDD_INI_TABLE.FDD_1
INC (IX+1)
LD B,8
LD A,#FF
.TFD1:
CP (HL)
INC HL
JR NZ,.YYYFD1
DJNZ .TFD1
DEC (IX+1)
.YYYFD1:
;Calculating IDE devices
LD IY,IDE.INIT_TBL_IDE0
LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM
CP #FF
JR Z,.ABSIDE0
CP IDE.Device.HDD
JR NZ,.NOT_HD0
INC (IX+2)
.NOT_HD0:
CP IDE.Device.CDROM
JR NZ,.NOT_CD0
INC (IX+3)
.NOT_CD0:
.ABSIDE0:
LD IY,IDE.INIT_TBL_IDE1
LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM
CP #FF
JR Z,.ABSIDE1
CP IDE.Device.HDD
JR NZ,.NOT_HD1
INC (IX+2)
.NOT_HD1:
CP IDE.Device.CDROM
JR NZ,.NOT_CD1
INC (IX+3)
.NOT_CD1:
.ABSIDE1:
LD IY,IDE.INIT_TBL_IDE2
LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM
CP #FF
JR Z,.ABSIDE2
CP IDE.Device.HDD
JR NZ,.NOT_HD2
INC (IX+2)
.NOT_HD2:
CP IDE.Device.CDROM
JR NZ,.NOT_CD2
INC (IX+3)
.NOT_CD2:
.ABSIDE2:
LD IY,IDE.INIT_TBL_IDE3
LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM
CP #FF
JR Z,.check_exit
CP IDE.Device.HDD
JR NZ,.NOT_HD3
INC (IX+2)
.NOT_HD3:
CP IDE.Device.CDROM
JR NZ,.check_exit
INC (IX+3)
.check_exit:
POP IY
POP AF
OUT (SLOT3),A
XOR A
RET
INCLUDE 'EXTENDED/FDD_DRIVER_2.asm'
INCLUDE 'EXTENDED/RAM_DISK_DRIVER_1.asm'
INCLUDE 'EXTENDED/IDE/HDD_DRV.asm'
INCLUDE 'EXTENDED/IDE/CD_DRV.asm'
INCLUDE 'EXTENDED/IDE/SHARED.asm'
;DISPLAY " EXTENDED end addr: ", /A, $
;

View File

@ -0,0 +1,113 @@
;
MACRO _mCMOS_MAX_TEST
ASSERT CMOS.MAX_ADDRESS = #7F, "WARNING!!! Logick broken with BIT 7 check"
BIT 7,D
SCF
RET NZ
ENDM
;
;!FIXIT ¯® ¤®ª¥ ­  äã­ªæ¨î ¤®«¦¥­ ¯¥à¥¤ ¢ë室®¬ CF áâ ¢¨âìáï
CMOS_EMU_WR:
PUSH DE
LD C,SLOT3
IN B,(C)
LD E,SYS_PAGE
OUT (C),E
LD E,D
LD D,#FF
LD (DE),A
OUT (C),B
POP DE
RET
;
; § ¯¨áì ¢ CMOS
CMOS_WR:
; [x]
_mCMOS_MAX_TEST
;
CALL CMOS_TEST
JR C,CMOS_EMU_WR
.WR: LD BC,CMOS.Port.Address.Write
OUT (C),D
LD BC,CMOS.Port.Data.Write
OUT (C),A
RET
;
;!FIXIT ¯® ¤®ª¥ ­  äã­ªæ¨î ¤®«¦¥­ ¯¥à¥¤ ¢ë室®¬ CF áâ ¢¨âìáï
CMOS_EMU_RD:
PUSH DE
LD C,SLOT3
IN B,(C)
LD E,SYS_PAGE
OUT (C),E
LD E,D
LD D, high SYS_PAGE.CMOS_EMULATOR
LD A,(DE)
OUT (C),B
POP DE
RET
;
; ç⥭¨¥ ¨§ CMOS
CMOS_RD:
; [x]
_mCMOS_MAX_TEST
;
CALL CMOS_TEST
JR C,CMOS_EMU_RD
.RD: LD BC,CMOS.Port.Address.Write
OUT (C),D
LD BC,CMOS.Port.Data.Read
IN A,(C)
RET
;
;<3B>஢¥àª  ­ «¨ç¨ï CMOS
CMOS_TEST:
PUSH AF
PUSH DE
PUSH BC
LD D,CMOS.TEST_CELL ; [x] à ­ìè¥ ¯¨á «® ¢ ï祩ªã 祪-á㬬ë
CALL CMOS_RD.RD
LD E,A
CPL
CALL CMOS_WR.WR
CALL CMOS_RD.RD
CPL
CP E
LD A,E
JR NZ,.CMOS_ERR
CALL CMOS_WR.WR
POP BC
POP DE
POP AF
AND A
RET
;
.CMOS_ERR:
CALL CMOS_WR.WR
POP BC
POP DE
POP AF
SCF
RET
; <20>¥ ¯®àâ¨â HL
; GET_CMOS_VALUE: LD A,L
; CALL CMOS_RD
; AND H
; .loop: RRCA
; RRC H
; JR NC,.loop
; RLCA
; RET

View File

@ -0,0 +1,155 @@
;!TODO ¨á¯à ¢¨âì SLOT2 ­  SLOT3 ¨ § â¥áâ¨âì
;!TODO ¤®¡ ¢¨âì ®¯¨á ­¨¥
GET_DISK_REDIR:
PUSH HL
LD HL,SYS_PAGE.DISK_TYPE-#4000
IN A,(SLOT2)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
LD A,(ZX_VARS.OPER_DISK)
AND 3
ADD A,L
LD L,A
LD L,(HL)
EX AF,AF'
OUT (SLOT2),A
LD A,L
POP HL
RET
;
;!TODO ¨á¯à ¢¨âì SLOT2 ­  SLOT3 ¨ § â¥áâ¨âì, ­® ­¥ ¯®«ì§®¢ âìáï á⥪®¬ ⮣¤ 
;!TODO ¤®¡ ¢¨âì ®¯¨á ­¨¥
SET_DISK_REDIR:
PUSH HL
LD HL,SYS_PAGE.DISK_TYPE-#4000
IN A,(SLOT2)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
LD A,(ZX_VARS.OPER_DISK)
AND 3
ADD A,L
LD L,A
LD (HL),E
;
;LD L,(HL)
LD L,E
;
EX AF,AF'
OUT (SLOT2),A
LD A,L
POP HL
RET
;
;!TODO ¨á¯à ¢¨âì SLOT2 ­  SLOT3 ¨ § â¥áâ¨âì
; Disk A, DRV - B
FDD_TO_DRV:
CP 4
CCF
RET C
LD C,A
LD A,B
CP 4
CCF
RET C
LD HL,SYS_PAGE.DISK_TYPE-#4000
LD L,B
IN A,(SLOT2)
LD B,A
LD A,SYS_PAGE
OUT (SLOT2),A
LD (HL),C
LD A,B
OUT (SLOT2),A
AND A
RET
;
;!TODO ¨á¯à ¢¨âì SLOT2 ­  SLOT3 ¨ § â¥áâ¨âì
; RAM-Disk A, DRV - B
RAMD_TO_DRV:
CP SYS_PAGE.RAMD_KEYS.NUM
CCF
RET C
LD C,A
LD A,B
CP 4
CCF
RET C
;
LD HL,SYS_PAGE.DISK_TYPE-#4000
LD L,B
;
IN A,(SLOT2)
LD B,A
LD A,SYS_PAGE
OUT (SLOT2),A
LD A,C
ADD A,4
LD (HL),A
LD A,B
OUT (SLOT2),A
AND A
RET
;
;!TODO ¨á¯à ¢¨âì SLOT2 ­  SLOT3 ¨ § â¥áâ¨âì
; HDD A, DRV - B
HDD_TO_DRV:
AND #0F
OR #40
LD C,A
LD A,B
CP 4
CCF
RET C
;
LD H,high (SYS_PAGE.DISK_TYPE-#4000)
LD L,B
;
IN A,(SLOT2)
LD B,A
LD A,SYS_PAGE
OUT (SLOT2),A
LD A,C
LD (HL),A
LD A,B
OUT (SLOT2),A
;
AND A
RET
;
; ­¥ 㡨¢ ¥â DE ¨ BC
GET_DRV_ST:
CP 4
CCF
RET C
PUSH BC
LD HL,SYS_PAGE.DISK_TYPE-#4000
ADD A,L
LD L,A
IN A,(SLOT2)
LD B,A
LD A,SYS_PAGE
OUT (SLOT2),A
LD C,(HL)
LD A,B
OUT (SLOT2),A
LD A,C
POP BC
AND A
RET
;

File diff suppressed because it is too large Load Diff

512
Crazy BIOS/exp/FUNC_PIC.ASM Normal file
View File

@ -0,0 +1,512 @@
;******************************************************************
; ¢å®¤: DE - ¢¥à⨪ «ì, HL - £®à¨§®­â «ì,
; B - 梥â â®çª¨, A - íªà ­
PIC_FN1:
AND A
SCF
RET NZ
IN A,(RGADR)
PUSH AF
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(WIN_ID_0.GRAF_Y)
ADD A,E
OUT (RGADR),A
LD A,B
LD BC,(WIN_ID_0.GRAF_X)
ADD HL,BC
LD B,A
LD A,#50
OUT (SLOT3),A
LD (HL),A
EX AF,AF'
OUT (SLOT3),A
POP AF
OUT (RGADR),A
RET
; ¢å®¤: DE - ¢¥à⨪ «ì, HL - £®à¨§®­â «ì.
; IX - ¤«¨­  «¨­¨¨ ¢ â®çª å ­¥ 0 !!!
; FILL - by A
; ?????
PIC_FN2:
LD D,A
IN A,(SLOT1)
EX AF,AF'
LD A,B
ADD A,#50
OUT (SLOT1),A
BIT 0,B
LD BC,#40+#4000
JR Z,PIC_FN2_NO_2ND
LD BC,#40+320+#4000
PIC_FN2_NO_2ND:
ADD HL,BC
LD A,E
OUT (RGADR),A
LD A,XH
AND A
JR Z,PIC_FN2_NO256
PIC_FN2_256L:
LD B,64
PIC_FN2_256:
LD (HL),D
INC HL
LD (HL),D
INC HL
LD (HL),D
INC HL
LD (HL),D
INC HL
DJNZ PIC_FN2_256
DEC A
JR NZ,PIC_FN2_256L
PIC_FN2_NO256:
LD B,XL
AND A
RR B
JR NC,PIC_FN2_NO1
LD (HL),D
INC HL
AND A
PIC_FN2_NO1:
RR B
JR NC,PIC_FN2_NO2
LD (HL),D
INC HL
LD (HL),D
INC HL
AND A
PIC_FN2_NO2:
XOR A
CP B
JR Z,PIC_FN2_NO4
PIC_FN2_4:
LD (HL),D
INC HL
LD (HL),D
INC HL
LD (HL),D
INC HL
LD (HL),D
INC HL
DJNZ PIC_FN2_4
PIC_FN2_NO4:
EX AF,AF'
OUT (SLOT1),A
XOR A
OUT (RGADR),A
RET
;************************************************************************
; ¢å®¤: dE - ¢¥à⨪ «ì, HL - £®à¨§®­â «ì.
; A',HL' -  ¤à¥á ¤ ­­ëå ¢® ¢â®à®© áâà ­¨æ¥ !
; BC' - ¤«¨­  ¤ ­­ëå
; ‚›‚Ž„ ˆ<E280B9>ˆˆ ’Ž—…Š
PIC_FN3:
IN A,(SLOT3)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,C
LD (SYS_PAGE.COPY_SLOT3),A
IN A,(SLOT2)
LD (SYS_PAGE.COPY_SLOT2),A
IN A,(SLOT1)
LD (SYS_PAGE.COPY_SLOT1),A
LD A,B
ADD A,#50
OUT (SLOT1),A
BIT 0,B
LD BC,40H+04000H
JR Z,PIC_FN3_NO_2ND
LD BC,40H+320+04000H
PIC_FN3_NO_2ND:
ADD HL,BC
LD A,E
OUT (RGADR),A
LD A,H
EXX
LD D,A
EXX
LD A,L
EXX
LD E,A
EXX
EX AF,AF'
OUT (SLOT2),A
EX AF,AF'
LD HL,SYS_PAGE.RAMD_FAT
LD L,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(HL)
OUT (SLOT3),A
EXX
LDIR
BIT 6,H
JR Z,PIC_FN3_NO
RES 6,H
EX AF,AF'
PIC_FN3_NO:
EXX
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(SYS_PAGE.COPY_SLOT1)
OUT (SLOT1),A
LD A,(SYS_PAGE.COPY_SLOT2)
OUT (SLOT2),A
LD A,(SYS_PAGE.COPY_SLOT3)
OUT (SLOT3),A
XOR A
OUT (RGADR),A
RET
;**************************************************************************
;PIC_FN4:
; ¢å®¤: HL - ¤ ­­ë¥ ¯ «¨âàë RGB, E - ­ ç «ì­ë© 梥â
; D - ç¨á«® 梥⮢, B - PAL-mask, A - page PAL
PIC_SET_PAL:
PUSH IX
EX AF,AF'
IN A,(RGADR)
PUSH AF ; á®åà ­¨âì ¯®«®¦¥­¨¥ RGADR
LD A,E
OUT (RGADR),A ; ­ ç «ì­ë© 梥⠢ ¯®àâ
LD A,D ; á®åà ­¨âì ç¨á«® 梥⮢
EX AF,AF' ; ¢¥à­ãâì áâà ­¨æã PAL
BIT 7,H ; ¯à®¢¥à¨âì  ¤à¥á ¤ ­­ëå
LD C,SLOT3 ; ¥á«¨ ­¨¦¥ 8000h
LD D,#C3 ; â® £à ä.íªà ­ ­  áâà ­¨æ¥ 3
JR Z,.NO_PAGE1
LD D,#43 ; ¨­ ç¥
LD C,SLOT1 ; ­  áâà ­¨æ¥ 1
.NO_PAGE1:
ADD A,A
PUSH AF
ADD A,A
AND #1C
XOR #E0 ; ¬« ¤è¨© ¡ ©â  ¤à¥á  PAL
LD E,A ; DE -  ¤à¥á ¢ ¢¨¤¥®-އ“
PUSH DE
POP IX ;  ¤à¥á ¯ «¨âàë
LD D,B ; ¬ áª  PAL
EX AF,AF' ; ¢¥à­ãâì ç¨á«® 梥⮢
LD B,A ; ç¨á«® 梥⮢
IN E,(C) ; á®åà ­¨âì áâà ­¨æã 3
LD A,#50 ; áâà ­¨æ  £à ä¨ç¥áª®£® RAM
OUT (C),A
POP AF
JR C,PIC_GET_PAL
; 横« ãáâ ­®¢ª¨ 梥⮢ ¯ «¨âàë
.loopPal:
LD A,(HL) ; B
AND D
LD (IX+2),A
INC HL
LD A,(HL) ; G
AND D
LD (IX+1),A
INC HL
LD A,(HL) ; R
AND D
LD (IX+0),A
INC HL
LD A,(HL) ; Y
AND D
LD (IX+3),A
INC HL
IN A,(RGADR)
INC A
OUT (RGADR),A
DJNZ .loopPal ; ¢ë¯®«­ïâì, ¯®ª  ­¥ 0
.exit: OUT (C),E ; ¢®ááâ ­®¢¨âì áâà ­¨æã 3
POP AF
OUT (RGADR),A ; ¢®ááâ ­®¢¨âì Y_PORT
POP IX
AND A
RET
PIC_GET_PAL:
; 横« ç⥭¨ï 梥⮢ ¯ «¨âàë
.loopPal:
LD A,(IX+2)
LD (HL),A ; B
INC HL
LD A,(IX+1)
LD (HL),A ; G
INC HL
LD A,(IX+0)
LD (HL),A ; R
INC HL
LD A,(IX+3)
LD (HL),A ; Y
INC HL
IN A,(RGADR)
INC A
OUT (RGADR),A
DJNZ .loopPal ; ¢ë¯®«­ïâì, ¯®ª  ­¥ 0
JR PIC_SET_PAL.exit
;********************************************************************
PIC_FN5: ; “<E28099>ŽŠ€ <E28098><EFBFBD>ˆ MODE
LD A,E
AND 1
OUT (RGMOD),A
RET
;*******************************************************************
; “áâ ­®¢ª  ¢­ãâ७­¥© ¯ «¨âàë
; A - page_pal, E - ­®¬¥à ¯ «¨âàë, B - ⨯ ¯ «¨âàë
SET_PAL_INIT:
LD D,A
DEC B
JP Z,SET_PAL_GRAF
DEC B
JP Z,SET_PAL_ZX
DEC B
JP Z,SET_PAL_IBM
; LD IX,PAL_DAT1
; JR Z,PIC_FN6_L1
; DEC B
; LD IX,PAL_DAT
; JR Z,PIC_FN6_L1
SCF
RET
;PIC_FN6_L1:
; AND 3
; ADD A,A
; ADD A,A
; ADD A,#E0
; LD L,A
; LD H,#43
; IN A,(SLOT1)
; PUSH AF
;
; LD A,#50
; OUT (SLOT1),A
; XOR A
; OUT (RGADR),A
; EX AF,AF'
; call PAL_LOOP_M
;
; POP AF
; OUT (SLOT1),A
; XOR A
; OUT (RGADR),A
;
; RET
;******************************************************************
; <20>¨á®¢ ­¨¥ «¨­¨¨.
; d… - ¢¥à⨪ «ì, HL - £®à¨§®­â «ì
; H' - ¢ëá®â , C'/DE',B' - add_parameters
; A - color
PIC_FN7:
LD D,A
IN A,(SLOT1)
PUSH AF
LD A,B
ADD A,#50
OUT (SLOT1),A
BIT 0,B
LD BC,#40+#4000
JR Z,.no_2nd
LD BC,#40+320+#4000
.no_2nd:
ADD HL,BC
LD A,E
.loop: OUT (RGADR),A ; áâà ­¨æ  ¢¨¤¥®-އ“
LD (HL),D
EXX
EX AF,AF'
DEC H
JR Z,.exit
LD A,C ; NEXT HORIZONTAL
ADD A,B
LD C,A
LD A,E
EXX
ADC A,L
LD L,A
EXX
LD A,D
EXX
ADC A,H
LD H,A
INC E ; NEXT VERTICAL
EX AF,AF'
INC A
JR .loop
.exit: EXX
POP AF
OUT (SLOT1),A
XOR A
OUT (RGADR),A
RET
;******************************************************************
; <20>¨á®¢ ­¨¥ «¨­¨¨.
; d… - ¢¥à⨪ «ì, HL - £®à¨§®­â «ì
; H' - ¢ëá®â , C'/DE',B' - add_parameters
; (IX) - colors
PIC_FN8:
IN A,(SLOT1)
PUSH AF
LD A,B
ADD A,#50
OUT (SLOT1),A
BIT 0,B
LD BC,#40+#4000
JR Z,.no_2nd
LD BC,#40+320+#4000
.no_2nd:
ADD HL,BC
LD A,E
.loop: OUT (RGADR),A ; áâà ­¨æ  ¢¨¤¥®-އ“
LD D,(IX)
INC IX
LD (HL),D
EXX
EX AF,AF'
DEC H
JR Z,.exit
LD A,C ; NEXT HORIZONTAL
ADD A,B
LD C,A
LD A,E
EXX
ADC A,L
LD L,A
EXX
LD A,D
EXX
ADC A,H
LD H,A
INC E ; NEXT VERTICAL
EX AF,AF'
INC A
JR .loop
.exit: EXX
POP AF
OUT (SLOT1),A
XOR A
OUT (RGADR),A
RET
;**************************************************
; ‚뢮¤ á¯à ©â  ­  íªà ­
; HL - £®à¨§®â «ì, dE - ¢¥à⨪ «ì
; A',HL' -  ¤à¥á ¤ ­­ëå
PIC_FN9:
;*********************************
; HL,E - ª®®à¤¨­ âë D - color
; B - Magnify
PIC_FN10:
PIC_FN11:
PIC_FN12:
PIC_FN13:
PIC_FN14:
PIC_FN15:
SCF
RET
;************************************
;
; <20>ªà ­­ë¥ â ¡«¨æë
;
;⥪á⮢®¥ ®ª­® 80x32
LP_SCR_80:
DB 40,32,0,0,27,0,0,0
DB 0, 0,0,0, 0,0,0,0
;⥪á⮢®¥ ®ª­® 40x32
LP_SCR_40:
DB 40,32,0,0,123,0,0,0
DB 0, 0,0,0, 0,0,0,0
;ᯥªâà㬮¢áª®¥ ®ª­® 32x24
LP_SCR_32:
DB 32,24,4,4,48,1,0,0
DB 0, 0,0,0, 0,0,0,0
;⥪á⮢®¥ ®ª­® 64x24
LP_SCR_64:
DB 32,24,4,4,155,0,0,0
DB 0, 0,0,0, 0,0,0,0
;£à ä¨ç¥áª®¥ ®ª­® 0
PIC_320X256_1:
DB 40,32,0,0,32,0,8,0
DB 0, 0,0,0, 0,0,0,0
;£à ä¨ç¥áª®¥ ®ª­® 1
PIC_320X256_2:
DB 40,32,0,0,96,0,48,0
DB 0, 0,0,0, 0,0, 0,0
;************************************
;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,444 @@
; DISPLAY "Service"
; !FIXIT âãâ ¬®¦­®, ¯®å®¤ã, ¤®å७  ã¡à âì
; ; áâà ­¨æë á ª®­ä®© ¤«ï Sp97, ¤«ï ᮢ¬¥á⨬®áâ¨ á ¤à¥¢­¨¬¨ ¯à®£ ¬¨
; PG_SP1 equ #EC
; PG_SP2 equ #EE
; PG_AY equ #EA
; ;
; ;!TODO § ¬ãâ¨âì § «¨¢ªã ª®­äë, à¥áâ àâ, ¯¥à¥å¢ â à¥á¥â  ᨫ ¬¨ BIOS
; PG_Sp2000 EQU #FE
; PG_Sp2000_REINIT EQU #FD
;
RST_CONF:
;--[] ZX Spectrum
.AY8910:
LD D,#35 ;!HARDCODE REG #35 - BASIC SETTING 1 (SYS_PAGE.CONFIG_DE+1 = #C13B on PAGE #FE)
CALL CMOS_RD
OR 1
CALL CMOS_WR
LD BC,Port_All_Mode
IN A,(C)
AND #FE ;!HARDCODE
OUT (C),A ; ACC_OFF
;LD A,PG_AY
LD DE,ACEX.Config_ID.Sp97_AY
JR .INT_PLD
;--[]
;--[] Sprinter ZX
.SP97_1:
LD D,#35 ;!HARDCODE REG #35 - BASIC SETTING 1 (SYS_PAGE.CONFIG_DE+1 = #C13B on PAGE #FE)
CALL CMOS_RD
AND #FE
CALL CMOS_WR
LD BC,Port_All_Mode
IN A,(C)
AND #FE ;!HARDCODE
OUT (C),A ; ACC_OFF
;LD A,PG_SP1
LD DE,ACEX.Config_ID.Sp97_1
JR .INT_PLD
;--[]
;--[]
.SP97_2:
LD BC,Port_All_Mode
IN A,(C)
OR 1 ; ACC_ON
OUT (C),A
;LD A,PG_SP2
LD DE,ACEX.Config_ID.Sp97_2
JR .INT_PLD
;--[]
;--[]
;[x]
.SP2000:
LD BC,Port_All_Mode
IN A,(C)
OR 1 ; ACC_ON
OUT (C),A
LD DE,ACEX.Config_ID.Sp2000
JR .INT_PLD
;--[]
;--[]
.CUSTOM:
CP #80
JR NC,.CHOOSE_CNF
; only for old FLEX10K soft compatible
LD C,SLOT3
IN B,(C)
OUT (C),A ; PAGE á ¯à®è¨¢ª®©
LD DE,(#C090) ; PLD-ID
OUT (C),B ; RET page
;--[] ;JR INT_PLD
.INT_PLD: ; only for old FLEX10K soft compatible
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
LD (SYS_PAGE.CONFIG_BYTE),DE
OUT (C),B
LD A,E ; config-byte
CP #FF
LD A,#80
JR Z,.YES_CBL
XOR A
.YES_CBL:
LD BC,CBL.SYS_PORT
OUT (C),A
LD A,E ; config-byte
OR #FE ;!HARDCODE
LD BC,Port_All_Mode ; SYSTEM Spectrum/Sprinter
OUT (C),A
LD A,#3C
OUT (FDC_93.DrvCTRL),A
XOR A
RET
;
;[x]
.CHOOSE_CNF:
; [x]
CP ACEX.Config_PG.Sp2000_SoftSetUp
JP Z,.ReturnSoftReset
;
CP ACEX.Config_PG.Sp2000
JR Z,.INIT_ACEX
;
CP ACEX.Config_PG.Sp2000_SetUp
JR Z,.SP2000
;
; only for old FLEX10K soft compatible
CP ACEX.Config_PG.Sp97_1
LD DE,ACEX.Config_ID.Sp97_1
JR Z,.INT_PLD
CP ACEX.Config_PG.Sp97_2
LD DE,ACEX.Config_ID.Sp97_2
JR Z,.INT_PLD
CP ACEX.Config_PG.Sp97_AY
LD DE,ACEX.Config_ID.Sp97_AY
JR Z,.INT_PLD
SCF
RET
;
;[x]
.INIT_ACEX:
DI
; ãáâ ­ ¢«¨¢ ¥¬ ­ã«¥¢ãî ª àâã ¯®à⮢
LD A,CNF_PORT.CNF_0
OUT (SYS_PORT.ON),A
; ¨ â ª ¯®­ïâ­® çâ® ¤¥« ¥â
IN A,(SLOT3) ; á®å࠭塞 ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë
PUSH AF
LD A,Spec_Page
OUT (SLOT3),A
; ¯à®¢¥à塞 à §¬¥à ¡«®ª  á ª®­ä®© ¨ ¯®«ãç ¥¬ áâà ­¨æë ª®­äë
LD HL,Spec_Page.bitstream_pages
LD A,B
AND A
JR Z,.INIT_ACEX.ReloadConfFromROM
;
CALL EMM.GetMemBlkPages
LD A,B
JR C,.INIT_ACEX.ERROR
CP BitStream_SizeInPages+1 ; ª®«¨ç¥á⢮ áâà ­¨æ ¢ ªíè ¤«ï ¡¨áâਬ  ¯«îá ®¤­ 
JR NC,.INIT_ACEX.ERROR
LD A,(Spec_Page.bitstream_pages)
INC A
JR Z,.INIT_ACEX.ERROR
;
.INIT_ACEX.ReloadConfFromROM:
; § ª¨¤ë¢ ¥¬ ¢ Spec_Page ¯à®£ã ¤«ï § «¨¢ª¨ ª®­äë
LD HL,.INIT_ACEX.PROGRAM
LD DE,Spec_Page.init_acex
LD BC,.INIT_ACEX.PROGRAM.Size
LDIR
; ¥á«¨ ZF=0, â® ¯à®æ¥¤ãà  á¤¥« ¥â à¥á¥â á ¯¥à¥§ «¨¢ª®© ¨§ BIOS, ¨­ ç¥ ¨§ Š<>˜
CALL Spec_Page.init_acex
LD BC,256*BIOS.REINIT.HARD_RESET + BIOS.REINIT
;
; ­  ¢å®¤¥ ¢ BC ¯ à ¬¥âàë ä㭪樨 BIOS
.INIT_ACEX.ifSoftreset:
; á®å࠭塞 ¢®âª­ãâë¥ áâà ­¨æë ¢ Spec_Page
IN A,(SLOT0)
LD E,A
IN A,(SLOT1)
LD D,A
IN A,(SLOT2)
POP HL ; ¢®ááâ ­ ¢«¨¢ ¥¬ ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë
LD L,A
LD (Spec_Page.page_0),DE
LD (Spec_Page.page_2),HL
; ¤®áâ ñ¬  ¤à¥á ¢®§¢à â  ¢ ¢ë§ë¢ îéãî äã­ªæ¨î ¨ á®å࠭塞 ¢ Spec_Page
POP DE
LD HL,RST_18_1.exit
XOR A
SBC HL,DE
JR NZ,.set_ret ; NZ - ¥á«¨ ¢ë§®¢ ¡ë« ¯® RST #18
POP DE ; ¥á«¨ ¢ë§®¢ ¡ë« ¢ އ“ ¯® RST 8
INC A
.set_ret:
LD (Spec_Page.RET_addr),DE
; A=0 - SYS_PORT.ON
; A=1 - SYS_PORT.OFF
LD (Spec_Page.Reload_Version),A
LD HL,0
ADD HL,SP
LD (Spec_Page.Stack_Point),HL
; “áâ ­ ¢«¨¢ ¥¬ ª«îç¨
LD HL,Spec_Page.flag_R
LD (HL),"R"
INC HL
LD (HL),"S"
INC HL
LD (HL),"T"
;
; .. ... ... ..
;!TODO ᤥ« âì äã­ªæ¨î ¯® § «¨¢ª¥ ᢮¥© ª®­äë, ¯¥à¥å¢ âã à¥á¥â .
; *. ‚室 ¢ ¯®¤äã­ªæ¨î ⮫쪮 ç¥à¥§ RST 08 ¨«¨ #18
; *. ‘®åà ­¨âì ¢á¥ áâà ­¨æë ¯®«ì§®¢ â¥«ï ¢ SYS_PAGE ¤«ï ¯¥à¥å¢ â  à¥á¥â 
; *. „®áâ âì á® á⥪   ¤à¥á ¢®§¢à â  ¨ á®åà ­¨âì ¢ SYS_PAGE ¤«ï ¯¥à¥å¢ â  à¥á¥â 
; *. ‘®åà ­¨âì ªã¤ -­¨¡ã¤ì §­ ç¥­¨¥ á⥪ 
; *
; .. ... ... ..
;LD BC,256*BIOS.REINIT.HARD_RESET + BIOS.REINIT
JP_to_BIOS
;
.ReturnSoftReset:
DI
; ãáâ ­ ¢«¨¢ ¥¬ ­ã«¥¢ãî ª àâã ¯®à⮢
LD A,CNF_PORT.CNF_0
OUT (SYS_PORT.ON),A
; ¨ â ª ¯®­ïâ­® çâ® ¤¥« ¥â
IN A,(SLOT3) ; á®å࠭塞 ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë
PUSH AF
LD A,Spec_Page
OUT (SLOT3),A
;
LD BC,256*BIOS.REINIT.SOFT_RESET + BIOS.REINIT
JR .INIT_ACEX.ifSoftreset
;
;;;
.INIT_ACEX.ERROR:
POP AF
OUT (SLOT3),A
SCF
RET
;
.INIT_ACEX.PROGRAM:
DISP Spec_Page.init_acex
;
SAFE_PORTY
IN A,(FastRAM.ON)
IN A,(SLOT1)
LD (.slot1_page),A
;
LD A,#FE ; ç⮡ ¯à®¢¥à¨âì, çâ® ¢ë§ë¢ âì ¯®á«¥ CALL NZ,.INIT_ACEX.PROGRAM.LOAD
; âãâ ZF ¤®«¦¥­ ¡ëâì ¨§ ¢ë§ë¢ î饩 ¯à®æ¥¤ãàë
CALL NZ,.INIT_ACEX.PROGRAM.LOAD ; ¥á«¨ RAM_BLOCK ID ­¥ à ¢¥­ 0, â® ¢ë¯®«­ï¥âáï
INC A ; ä« £ ZF=0 £à㧨¬ ¨§ ROM
;
.INIT_ACEX.PROGRAM.SET_KEYS:
LD A,3
OUT (FastRAM.SLOT0),A ; ‘âà ­¨æ  Š<>˜ = 3
;
LD HL,.INIT_ACEX.Reload_String ; ä« £ ¯¥à¥§ £à㧪¨ ¨§ Š<>˜- 
JR Z,.skip ; ãáâ ­ ¢«¨¢ ¥¬ ä« £ ¯¥à¥§ £à㧪¨ ¨§ Š<>˜- 
INC L ; § â¨à ¥¬ ä« £ ¯¥à¥§ £à㧪¨ ¨§ Š<>˜- 
.skip: LD DE,ACEX.LOADER.String_Address-#C000
LD BC,#10
LDIR
LD HL,#FFFF ; § «¨âì ª®­äã ⮫쪮 ¯à¨ ¯¥à¢®© ¯¥à¥§ £à㧪¥
;LD HL,ACEX.LOADER.Reload_Flag ; § «¨¢ âì ª®­ä㠯ਠª ¦¤®© ¯¥à¥§ £à㧪¥
LD (ACEX.LOADER.Reload_Flag_Address-#C000),HL
;
.INIT_ACEX.PROGRAM.END:
XOR A
OUT (FastRAM.SLOT0),A
IN A,(FastRAM.OFF)
.slot1_page+1: LD A,0
OUT (SLOT1),A
RET
;
;
.INIT_ACEX.PROGRAM.LOAD:
XOR A ; áâà ­¨æ  Š<>˜
LD HL,Spec_Page.bitstream_pages
OUT (FastRAM.SLOT0),A ; ‘âà ­¨æ  Š<>˜ = 0
INC A
.INIT_ACEX.PROGRAM.load_loop:
EX AF,AF'
LD A,(HL)
INC HL
CP #FF
RET Z
OUT (SLOT1),A ; áâà ­¨æ  á ¤ ­­ë¬¨ ä ©« 
EX AF,AF'
;
; ¯¥à¥ª¨¤ë¢ ­¨¥ #3000 ¡ ©â®¢ ¢ Š<>˜(0) = #1000
EXX
LD HL,#4000
LD DE,#1000
LD BC,#3000
LDIR
; ¤®ª¨¤ë¢ ­¨¥ #1000 ¡ ©â®¢ ¢ Š<>˜(1) = #0000
; HL = #7000
OUT (FastRAM.SLOT0),A ; ‘âà ­¨æ  Š<>˜ = 1
INC A
;
LD D,C ; LD DE,0
LD B,#10 ; LD BC,#1000
LDIR
EXX
JR .INIT_ACEX.PROGRAM.load_loop
.INIT_ACEX.Reload_String:
DB ACEX.RELOAD_STRING
;
ENT
.INIT_ACEX.PROGRAM.Size EQU $-.INIT_ACEX.PROGRAM
;
;***************************************
;[x]
;--------------------------[;!TODO ¯®â¥áâ¨âì]--------------------------;
; B - ¯ à ¬¥âà á¡à®á 
; B = 1 - RESTART.
; B = 2 - Soft reset
; B = 3 - Hard reset
; B = 4 - Reinit spectrum pages
REINIT: DEC B
JR Z,.Restart ;1
DEC B
JR Z,.SoftReset ;2
DEC B
JR Z,.HardReset ;3
DEC B
SCF
RET NZ
.ReinitZXpages: ;4
LD DE,RESERVED_PAGES ; â ¡«¨æ  § ­ïâëå á¨á⥬­ëå áâà ­¨æ
LD HL,SYS_PAGE.RAMD_FAT ; €¤à¥á FAT އ“.
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(DE)
.zxloop:
CP #FF
JR Z,.endzxloop
INC DE
LD L,A
LD A,(HL)
AND A
JR NZ,.errorzxloop
LD A,(DE)
LD (HL),A
JR .zxloop
.errorzxloop:
DEC DE
LD HL,-RESERVED_PAGES-1
ADD HL,DE
JR NC,.errorzxloop_noChanges
DEC DE
LD H,high SYS_PAGE.RAMD_FAT
LD A,(DE)
LD L,A
LD A,#FF
LD (HL),A
.errorzxloop_noChanges:
SCF
.endzxloop:
OUT (C),B
RET
;
;[x]
.HardReset:
DI
LD A,DCP_PAGE
OUT (SLOT1),A ; set DCP page
LD A,ACEX.RESET
LD (#4400),A ; open for WR
.loop: LD BC,#0100 ; 横« á¡à®á 
OUT (C),C
LD B,0
OUT (C),C
JR .loop ; ¯®«­®áâìî § æ¨ª«¨âì!
;
;[x]
.Restart: DI
XOR A
LD BC,#1FFD
OUT (C),A
LD B,#7F
OUT (C),A
OUT (RGADR),A
OUT (RGMOD),A
OUT (SLOT0),A
LD A,5
OUT (SLOT1),A
LD A,2
OUT (SLOT2),A
LD A,DCP_PAGE
OUT (SLOT3),A
JP 0 ;Restart
;
;
.SoftReset: DI
LD A,#10
LD BC,#1FFD
OUT (C),A ; 8-ï áâà ­¨æ  !!
;
LD A,RESET_PAGE
OUT (SLOT3),A
LD A,CNF_PORT.TURBO.OFF
OUT (SYS_PORT.ROM),A
.loop2: LD (#C000),A ; Soft RESET !!!
JR .loop2
;
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; ­¥ ¤®«¦­® ¯®àâ¨âì DE
SET_ROM_FLAG_ZX:
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'
LD A,Spec_Page
OUT (SLOT3),A
XOR A
LD (Spec_Page.flag_Z),A
LD (Spec_Page.flag_X),A
EX AF,AF'
OUT (SLOT3),A
RET
;----------------------------------------------------------------------;
;

554
Crazy BIOS/exp/FUNC_SYS.ASM Normal file
View File

@ -0,0 +1,554 @@
;----------------------------------------------------------------------;
; <20>®«ã祭¨¥  ¤à¥á®¢ ¯®à⮢ ¨ ¤ ­­ëå ¤«ï ¢®ááâ ­®¢«¥­¨ï
; ‚室: A - ­®¬¥à ®ª­  ¯à®¥æ¨à®¢ ­¨ï
; ‚ë室: B - ¤ ­­ë¥, C -  ¤à¥á ¯®àâ  ®ª­ 
EMM.GetBanksPorts:
INC A
LD B,A
DJNZ .slot1
LD C,SLOT0
IN B,(C)
RET ;45t
.slot1: DJNZ .slot2
LD C,SLOT1
IN B,(C)
RET ;58t
.slot2: DJNZ .slot3
LD C,SLOT2
IN B,(C)
RET ;71t
.slot3: DJNZ .error
LD C,SLOT3
IN B,(C)
RET ;84t
.error: SCF
RET ;74t
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; HL - ¡ãä¥à
; !FIXIT SYS_PAGE.CONFIG_BYTE 㦥 ­¥ â® ¯®ª §ë¢ ¥â, ¨ ¢®®¡é¥ ¢áî ¡ë ¯¥à¥¤¥« âì, ¯®¯à ¢¨âì ¢ ¤®ª¥, ª ª ¬¨­¨¬ã¬
FN_VERSION:
PUSH HL
EX DE,HL
; LD HL,ID_SPRINTER_FullSize
; LD B,0
; LD C,(HL)
; INC HL
LD HL,ID_SPRINTER
LD BC,ID_SPRINTER.Size
LDIR
;
POP HL
LD DE,(ID_Version) ;rdlow-ok
;
IN A,(SLOT2)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
LD BC,(SYS_PAGE.CONFIG_BYTE-#4000) ; Version PLD ; !TODO ç¥à¥§ áâàãªâãàã ¤«ï ¯¥à¥¬¥­­ëå ¡¨®á 
EX AF,AF'
OUT (SLOT2),A
LD A,ID_SPRINTER.Records_Num ; —¨á«® ¯®«¥©
AND A
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; [x] 28/01/24 ¤®¡ ¢«¥­  ¯®¤äã­ªæ¨ï ¢ë¤ ç¨ ¨­äë ¯à® Acex
FN_CRIPT:
DJNZ .Acex_ver
;
; BoardID_start old address #312A
; BoardID_end old address #312D
.board_id:
LD HL,(BOARD_INFO.number) ;rdlow-ok
LD A,(BOARD_INFO.type) ;rdlow-ok
LD BC,(BoardID.start) ;rdlow-ok
LD DE,(BoardID.end) ;rdlow-ok
AND A
RET
;
.error: LD A,BIOS.Error.InvalidSubFunction
SCF
RET
;
.Acex_ver:
DJNZ .error
PUSH HL
LD A,R
DI
PUSH AF
;
LD HL,-.stackDepth - .readProcedure.size ; memory stack use!
ADD HL,SP
PUSH HL ;  ¤à¥á ¯à®£à ¬¬ë .readProcedure
LD DE,.readProcedure ; ¯¥à¥­¥á⨠¯à®£à ¬¬ã ­  á⥪
EX DE,HL
LD BC,.readProcedure.size
LDIR ; ¯à®£à ¬¬  ­  á⥪¥
LD A,+(12 xor %0000'1000) ; !HARDCODE bitstream page in rom
RET
.return:;
POP AF
JP PO,.no_EI
EI
.no_EI: CALL .choose_chip
POP DE
LD BC,.chip_ID_TXT.RecordSize
LDIR
.cnf+1: LD DE,bitstream_ver_hex
AND A
RET
;
.choose_chip:
XOR A
LD HL, - ACEX.Chip_ID.K30
ADC HL,DE
LD HL,.chip_ID_TXT.K30
RET Z
OR A ; á­ïâì CF
INC A
LD HL, - ACEX.Chip_ID.K50
ADC HL,DE
LD HL,.chip_ID_TXT.K50
RET Z
POP HL ; ¡ « ­á á⥪ 
.error_unknownChip:
SCF
POP HL
LD A,BIOS.Error.UnknownDevice
RET
;
; ¯à®æ¥¤ãà , ¯¥à¥­®á¨¬ ï ­  á⥪ ¤«ï ç⥭¨ï Acex ID
; ®áâ®à®¦­¥¥ á PUSH, ¥á«¨ ­ ¤® ¬­®£®, ⮠㢥«¨ç¨¢ © .stackDepth
.readProcedure:
OUT (ROM.SLOT0),A ; ROM_PAGE
LD DE,(#100 + 3) ; !HARDCODE §¤¥áì ç¨â ¥âáï Acex ID
XOR A
OUT (ROM.SLOT0),A
OUT (SYS_PORT.ROM),A
JP .return
.stackDepth EQU 2 ; à ááâ®ï­¨¥ ®â ª®­æ  ¯à®æ¥¤ãàë ¤® ¢¥à設ë á⥪ .
.readProcedure.size EQU $-.readProcedure
;
.chip_ID_TXT:
.chip_ID_TXT.K30: DZ "K30"
.chip_ID_TXT.RecordSize EQU $-.chip_ID_TXT
.chip_ID_TXT.K50 DZ "K50"
;.chip_ID_TXT.K100 DZ "K100"
.chip_ID_TXT.Size EQU $-.chip_ID_TXT
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
;EMM_FN7
EMM.CheckColdInit:
IN A,(SLOT2)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
LD HL,SYS_PAGE.ID_FLAG - #4000
; LD DE,ID_SPRINTER_FullSize
; LD A,(DE)
; DEC A
; INC DE
; LD B,A
LD B,ID_SPRINTER.Record1_Size
LD DE,ID_SPRINTER
.loop: LD A,(DE)
CP (HL)
JR NZ,INIT_SYS_ALL
INC HL
INC DE
DJNZ .loop
; Disable user IM address in SYS_PAGE
XOR A
LD (SYS_PAGE.INT_ID - #4000),A
;
EX AF,AF'
OUT (SLOT2),A
RET
;MSDOS_COLD_VARS:
EMM.FullInit:
DI
IN A,(SLOT2)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
INIT_SYS_ALL:
DI
; LD HL,ID_SPRINTER_FullSize
; LD DE,SYS_PAGE.ID_FLAG - #4000
; LD C,(HL)
; LD B,0
; INC HL
LD HL,ID_SPRINTER
LD DE,SYS_PAGE.ID_FLAG - #4000
LD BC,ID_SPRINTER.Record1_Size
LDIR
; Disable user IM address in SYS_PAGE
XOR A
LD (SYS_PAGE.INT_ID - #4000),A
;
;!TODO çâ® §  ¯¥à¥¬¥­­ë¥?
LD HL,SYS_PAGE.DISK_TYPE-#4000
LD (HL),DRIVE_CODES.TRDOS.FDD ; FDD A
INC HL
LD (HL),DRIVE_CODES.TRDOS.FDD + 1 ; FDD B
INC HL
LD (HL),DRIVE_CODES.TRDOS.HDD
INC HL
LD (HL),DRIVE_CODES.TRDOS.HDD
INC HL
LD (HL),0 ; SYS_PAGE.COPY_SLOT0
INC HL
LD (HL),5 ; SYS_PAGE.COPY_SLOT1
INC HL
LD (HL),2 ; SYS_PAGE.COPY_SLOT2
INC HL
LD (HL),0 ; SYS_PAGE.COPY_SLOT3
LD A,9
LD (SYS_PAGE.MSD_SECS-#4000),A
XOR A
LD (SYS_PAGE.DS_1440-#4000),A
LD HL,SYS_PAGE.RAMD_KEYS-#4000
LD DE,SYS_PAGE.RAMD_KEYS+1-#4000
LD BC,SYS_PAGE.RAMD_KEYS.NUM-1
LD (HL),0
LDIR
; [x] 04/11/2023
LD HL,SYS_PAGE.Sp_RAMD_KEYS-#4000
LD DE,SYS_PAGE.Sp_RAMD_KEYS+1-#4000
LD BC,SYS_PAGE.Sp_RAMD_KEYS.NUM-1
LD (HL),0
LDIR
;
LD DE,ZG_ADDRESS ;  ¤à¥á §­ ª®£¥­¥à â®à 
LD (SYS_PAGE.WIN_ZG-#4000),DE
;
;-----------[new code start]------------; !!!!! ¯®á¬®âà¥âì-¯à¨ç¥á âì
INIT_VSyncAndWaits:
LD D,CMOS_CELL.ScreenSET
CALL CMOS_RD
ld d,a
jr nc,.cmos_OK
; ¥á«¨ ­¥â CMOS, â® áâ ­¤ àâ­ë¥ ­ áâனª¨
ld a,3
ld (SYS_PAGE.VSyncAndWaits-#4000),A
jr z,INIT_CONFIG_ALL.setDefaultINT
.cmos_OK:
and high CMOS_CELL.ScreenSET.Mask.Sinc
and #40
ld a,3 ; 320 lines & no waits
jr z,.setVSyncAndWaits
dec a ; 312 lines & no waits
.setVSyncAndWaits:
ld (SYS_PAGE.VSyncAndWaits-#4000),A
INIT_CONFIG_ALL:
ld a,d
and high CMOS_CELL.ScreenSET.Mask.Int
jr z,.setDefaultINT ; set default int
xor high CMOS_CELL.ScreenSET.Mask.Int
LD HL,SCREEN_TABLES.ORIGINAL ; set original int
jr z,.setINT
and #10
LD HL,SCREEN_TABLES.SCORPION ; set scorpion int
jr z,.setINT
.setDefaultINT:
LD HL,SCREEN_TABLES.PENTAGON ; set pentagon int
.setINT:
LD (SYS_PAGE.CONFIG_ALL-#4000),HL
;------------[new code end]-------------
;
LD DE,CNF_PORT.CNF_0 + ROM.BIOS
LD (SYS_PAGE.CONFIG_DE-#4000),DE
LD HL,SYS_PAGE.TASK_DATA-#4000 ; 㡨âì ¢á¥ § ¤ ç¨
LD DE,SYS_PAGE.TASK_DATA+1-#4000
LD BC,#FF
LD (HL),0
LDIR
EX AF,AF'
OUT (SLOT2),A
CALL EMM.InitMem
;**************************************************************
; —⥭¨¥ ¯®á«¥¤­¨å 256 ¡ ©â®¢ <20>‡“ ¢ á«ã¦¥¡­ãî áâà ­¨æã
; § ç¥¬-â®, ⨯ , ä«¥è¥à ¬®£ â ¬ á®åà ­¨âì ¤ ­­ë¥ CMOS.
;READ_ROM_PAGE_X:
; IN A,(SLOT3)
; PUSH AF
; LD A,SYS_PAGE
; OUT (SLOT3),A
; CALL READ_ROM_PAGE_X ; READ CMOS-DATA
; POP AF
; OUT (SLOT3),A
;**************************************************************
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
FN_TURBO:
CP 2
JR Z,.TURBO_SWITCH
CP 3
JR Z,.TURBO_SWITCH
CP #12
JR Z,.SET_FDD_720
CP #13
JR Z,.SET_FDD_1440
SCF
RET
;!FIXIT ¬¥­ï¥¬ ¯«®â­®áâì - ¬¥­ï¥¬ ¢ á¨á⥬­®© áâà ­¨æ¥ ¨­äã ®¡ í⮬
.SET_FDD_720:
LD A,FDD_Density.SET_720
OUT (FDD_Density),A
AND A
RET
;!FIXIT ¬¥­ï¥¬ ¯«®â­®áâì - ¬¥­ï¥¬ ¢ á¨á⥬­®© áâà ­¨æ¥ ¨­äã ®¡ í⮬
.SET_FDD_1440:
LD A,FDD_Density.SET_1440
OUT (FDD_Density),A
AND A
RET
.TURBO_SWITCH:
LD C,A
IN A,(SLOT3)
LD B,A
LD A,SYS_PAGE
OUT (SLOT3),A
;
;LD DE,(SYS_PAGE.CONFIG_DE)
;LD A,E
LD A,(SYS_PAGE.CONFIG_DE)
;
AND #FC ; !HARDCODE
OR C
;
;LD E,A
;LD (SYS_PAGE.CONFIG_DE),DE
LD (SYS_PAGE.CONFIG_DE),A
AND 3
;
OUT (SYS_PORT.ROM),A
LD A,B
OUT (SLOT3),A
AND A
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
;!TODO
;FN_GET_SYS_VAR:
; ‚室: HL - ­®¬¥à á¨á⥬­®© ¯¥à¥¬¥­­®©
; ‚ë室: HL - §­ ç¥­¨¥ á¨á⥬­®© ¯¥à¥¬¥­­®©
; RET
;----------------------------------------------------------------------;
;!TODO ᪮¬¯®­®¢ âì
;----------------------------------------------------------------------;
FN_SEND_BYTE:
LD E,A ; á®åà ­¨âì ¡ ©â
CALL SEND_HALF_BYTE ; ¯¥à¥¤ âì ¯®«ã¡ ©â ¨§ …
RET C ; ¢®§¢à â ¯® ®è¨¡ª¥
LD A,E ; ᤢ¨­ãâì ¡ ©â ­  4 ¡¨â 
RRCA
RRCA
RRCA
RRCA
LD E,A
SEND_HALF_BYTE: ; ¯¥à¥¤ âì ¯®«®¢¨­ã ¡ ©â  _E_!!
LD A,E
OR #F0 ; ãáâ ­®¢¨âì áâ à訥 ¡¨âë LPT ¤ â 
OUT (Z84.PIO.Port_A.Data),A
LD BC,0 ; áç¥â稪 â ©¬- ãâ 
WAIT_SENT_1:
IN A,(KEMPSTON.PC_Link) ; ¯à®¢¥à¨âì ¡¨â 4 ­  1 ¯à¨ £®â®¢­®á⨠PC
BIT 4,A
JR NZ,CONTINUE_SENT
DEC BC
LD A,B
OR C
JR NZ,WAIT_SENT_1
XOR A
SCF ; â ©¬- ãâ
RET
CONTINUE_SENT: ; PC - £®â®¢
LD A,E
AND #0F ; á¡à®á¨âì áâ à訥 ¡¨âë LPT -
OUT (Z84.PIO.Port_A.Data),A
; áç¥â稪 â ©¬- ãâ 
LD BC,0
;
WAIT_SENT_2:
IN A,(KEMPSTON.PC_Link) ; ¯à®¢¥à¨âì ¡¨â 4 ­  0 - á®®¡é¥­¨¥ ®â PC
BIT 4,A
JR Z,CONTINUE_SENT2
DEC BC
LD A,B
OR C
JR NZ,WAIT_SENT_2
LD A,E
OR #F0 ; ãáâ ­®¢¨âì áâ à訥 ¡¨âë LPT ¤ â 
OUT (Z84.PIO.Port_A.Data),A
XOR A
SCF ; â ©¬- ãâ
RET
CONTINUE_SENT2: ; ¯®«ã¡ ©â ¯¥à¥¤ ­
LD A,E
OR #F0 ; ãáâ ­®¢¨âì áâ à訥 ¡¨âë LPT ¤ â 
OUT (Z84.PIO.Port_A.Data),A
XOR A
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
FN_RESEIVE_B: ; ¯à¨­ïâì ¡ ©â ¢ A
CALL RESEIVE_POLU_BYTE ; ¯à¨­ïâì ¯®«ã¡ ©â
RET C ; ¢®§¢à â ¯® ®è¨¡ª¥
RLCA
RLCA
RLCA
RLCA
AND #F0
LD E,A
CALL RESEIVE_POLU_BYTE ; ¢â®à®©
RET C
AND 0Fh
OR E
RET ; ¡ ©â ¯à¨­ïâ
RESEIVE_POLU_BYTE: ; ¯à¨­ïâì ¯®«®¢¨­ã ¡ ©â  ¢ …
LD A,#F0 ; ãáâ ­®¢¨âì áâ à訥 ¡¨âë LPT ¤ â 
OUT (Z84.PIO.Port_A.Data),A
LD BC,0 ; áç¥â稪 â ©¬- ãâ 
WAIT_RES_1:
IN A,(KEMPSTON.PC_Link) ; ¯à®¢¥à¨âì ¡¨â 4 ­  1 ¯à¨ £®â®¢­®á⨠PC
BIT 4,A
JR NZ,CONTINUE_RES
DEC BC
LD A,B
OR C
JR NZ,WAIT_RES_1
XOR A
SCF ; â ©¬- ãâ
RET
CONTINUE_RES: ; PC - £®â®¢, ¦¤ âì 0
XOR A ; á¡à®á¨âì áâ à訥 ¡¨âë LPT - ¦¤¥¬ ¯®«ã¡ ©â
OUT (Z84.PIO.Port_A.Data),A
LD BC,0 ; áç¥â稪 â ©¬- ãâ 
WAIT_RES_2:
IN A,(KEMPSTON.PC_Link) ; ¯à®¢¥à¨âì ¡¨â 4 ­  0 - á®®¡é¥­¨¥ ®â PC
BIT 4,A
JR Z,CONTINUE_RES2
DEC BC
LD A,B
OR C
JR NZ,WAIT_RES_2
LD A,#F0 ; ãáâ ­®¢¨âì áâ à訥 ¡¨âë LPT ¤ â 
OUT (Z84.PIO.Port_A.Data),A
SCF
RET ; ®è¨¡ª 
CONTINUE_RES2: ; ¯®«ã¡ ©â ¢ëáâ ¢«¥­
LOOP_EQ: ; ¯à®ç¨â âì ¥é¥ à §, çâ® ¡ë ᮢ¯ «®
AND #0F
LD B,A
IN A,(KEMPSTON.PC_Link)
AND #0F
CP B
JR NZ,LOOP_EQ
OR #F0 ; ãáâ ­®¢¨âì áâ à訥 ¡¨âë LPT ¤ â  ¢ 1 - ¯à¨­ïâ®
OUT (Z84.PIO.Port_A.Data),A
RET
;----------------------------------------------------------------------;
;
;----------------------------------------------------------------------;
;**********************************
; START_DI:
; PUSH AF
; LD A,R
; LD A,#80
; JP PE,XX_DI2
; XOR A
; XX_DI2: LD R,A
; DI
; POP AF
; RET
;
; END_DI: PUSH AF
; LD A,R
; AND #80
; JR Z,XX_DI3
; EI
; POP AF ; PE
; RET
; XX_DI3: DI
; POP AF ; PO
; RET
;**********************************
;----------------------------------------------------------------------;?????
;DE - ªã¤  - áâà ­¨æ  ®âªàëâ !
;BC - ᪮«ìª®
;HL - ¡ãä¥à
;
; PUSH BC
; LD H,D
; LD L,E
; ADD HL,BC
; JR C,CUT
; LD HL,BUFER
; LDIR
; POP BC
; RET
;CUT:
; PUSH HL
; LD A,L
; LD L,C
; LD C,A
; LD A,H
; LD H,B
; LD B,A
;
; AND A
; SBC HL,BC
; LD B,H
; LD C,L
; LD HL,BUFER
; LDIR
; CALL NEXT_BANK
; POP BC
; LD A,B
; OR C
; JR Z,LAB
; LDIR
;LAB: POP BC
; RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;

View File

@ -0,0 +1,5 @@
; Header of bitstream which non packed
DB #FF,#FF,#62,#7B,#39,#00;,#FF,#FF ; 1k30
; Packed:
;DB #FF,#FF,#62,#7B,#3C,#00;,#01,#FF ; 1k50
;

View File

@ -0,0 +1,169 @@
;
;**********************************;
; ACEX Loading program ;
;**********************************;
MACRO Conf_loader altera_chip
.START: DI
LD BC,#FF*256 + Z84.SYS.Control
XOR A ; Z84.REG.WaitState_Ctrl - register - waits
OUT (C),A ; Z84.SYS.Control
INC C ; LD BC,#FFEF
LD A,4 ; Memory waits set to 1
OUT (C),A ; Z84.SYS.Data
DEC C ; Z84.SYS.Control
DEC A ; LD A,3 - 3-nd register - boundaries
OUT (C),A ; Z84.REG.Misc_Ctrl
INC C ; cs0 enable, cs1 enable, 32-Bit CRC disable, reset output enable, Clock Divide-by-two
OUT (C),A ; Z84.SYS.Data
DEC C ; Z84.SYS.Control
DEC A ; LD A,2 - Z84.REG..CS_Boundary 2-nd register - boundaries
OUT (C),A ; Z84.SYS.Data
INC C
LD A,#FE ; boundaries FFFF..F000 - CS1
OUT (C),A ; EFFF..0000 - CS0
JR .LOOP_S1
;**************************************
BLOCK #38-$,#FF
JP 0
;**************************************
.LOOP_S1:
LD HL,#FEF0 ; !HARDCODE
LD DE,.STRING
.LOOP_S:
LD A,(DE)
CP (HL)
JR NZ,.NO_CNF_RAM
INC E
INC L
JR NZ,.LOOP_S ; !!!!! ¯à¨¢ï§ª  ª  ¤à¥áã ¢ HL
; !TODO ã¡à âì ¢¥©âë ¤«ï ªíè ?
LD BC,#FF*256 + Z84.SYS.Control
LD A,Z84.REG.CS_Boundary
OUT (C),A ; 0 register - waits
INC C
LD A,#F0
OUT (C),A ; boundaries FFFF..1000 - CS1
; ; 0FFF..0000 - CS0
LD HL,#1000 ; !!!!! Load bitstream from Fast-RAM
JR .NEW_SHM
;**************************************
BLOCK #66-$,#FF
JP 0
;**************************************
.NO_CNF_RAM:
LD HL,#0100 ; !!!!! Load bitstream from ROM
.NEW_SHM:
;--------------[conf check]-------------
LD A,H ; á®å࠭塞 áâ à訩  ¤à¥á ­ ç «  ª®­äë,
; ­ ç «® ª®­äë ¤®«¦­® ¡ëâì á ¬« ¤è¨¬  ¤à¥á®¬ = 0
EXX
LD L,0
LD H,A
EX AF,AF'
; ¢ HL  ¤à¥á ¯¥à¢®£® ¡ ©â  ª®­äë
LD DE,.Conf_header
LD B,.Conf_header.length
.conf_header_loop:
LD A,(DE)
CP (HL)
JR NZ,.Conf_Packed
INC DE
INC L
DJNZ .conf_header_loop
;XOR A
JR .exit_conf_check
.Conf_Packed:
SCF
.exit_conf_check:
EX AF,AF'
EXX
;---------------------------------------
LD DE,#FE00 ;!HARDCODE ; !!!!! Check flag "don't erase fast-ram bitstream" - "IM"
LD A,(#FEE0)
CP "I"
JR NZ,.ONES_CONFIG
LD A,(#FEE1)
CP "M"
JR NZ,.ONES_CONFIG
DEC D ; multiple config!
.ONES_CONFIG:
LD IY,SP2000_Loader_Flag
;LD IX,#FFFD
LD IX,ACEX.Config_ID.Sp2000
.LOOP1:
LD A,(HL)
ex af,AF'
ld b,1
jr nc,.no_packed_loop
ex af,AF'
LD B,A ; save byte to B to check later if we worked with zero
OR A
JR NZ,.LOOP1A
INC HL
LD C,(HL) ; set counter
jr .LOOP1A
.no_packed_loop:
ex af,AF'
.LOOP1A:
;---[Sending bits to Altera]---[v]
DUP 7
LD (DE),A
RRCA
EDUP
LD (DE),A
;------------------------------[^]
INC E
LD A,B ; was it zero?
OR A
JR NZ,.LOOP1E
; it was zero so we need to decrement counter
DEC C
JR NZ,.LOOP1A
; end of the counter reached
.LOOP1E:
INC HL
JR .LOOP1
.STRING: DB ACEX.RELOAD_STRING
.Conf_header: include 'src/bios/Loader/bitstream_header.inc'
.Conf_header.length EQU $-.Conf_header
;----------------------;
BLOCK #FE-$,#FF
; <20>â®, ᪮॥ ¢á¥£®, à㤨¬¥­â, â®â á ¬ë© ¡ ©â ®¯¨á â¥«ï ª®­äë,
; ª®â®àë© ¨é¥â § £àã§ç¨ª ¤«ï Sp97 ¯® áâ à®¬ã  ¤à¥áã #C090.
; ‚®âª­ã« ¥£® ¢ ª®­æ¥ § £àã§ç¨ª , ¬®¦¥â ¯®â®¬ ¯à¨£®¤¨âáï.
.DEF_SYM: DW ACEX.Config_ID.Sp2000
;------------------------------[Loader end]
DEFINE Altera_Chip altera_chip
LUA
local file_path = 'Build/ACEX/'
local file_ext = '.BIN'
local altera_ver = sj.get_define("Altera_Chip")
sj.insert_define("Altera_File", '"' .. file_path .. altera_ver .. file_ext .. '"')
ENDLUA
UNDEFINE Altera_Chip
INCBIN Altera_File
UNDEFINE Altera_File
ENDM
;

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@ -0,0 +1,199 @@
;
;------------[LUA functions]------------;
includelua 'Shared_Includes/LUA/Functions.lua'
;---------------------------------------;
LUA PASS1
-- <EFBFBD>஢¥à塞 BMP, ¤®áâ ñ¬ ¨§ ­¥£® ¯ à ¬¥âàë, ०¥¬ ­  ªã᪨
bmp_width, bmp_height, bmp_image_size, bmp_image_offset, bmp_colors = Get_bmp8bit_values (sj.get_define("PICTURE_FILE"))
if bmp_width ~= 128 then sj.error("Invalid BMP width", bmp_width) end
if bmp_height ~= 72 then sj.error("Invalid BMP height", bmp_height) end
if bmp_colors ~= 256 then sj.error("Invalid BMP number of colors", bmp_colors) end
if not File_save(sj.get_define("PICTURE_FILE"), "./Build/Bin/LOGO_PAL.BIN", bmp_image_offset-1024, 1024) then sj.error("Palete save error!") end
if not File_save(sj.get_define("PICTURE_FILE"), "./Build/Bin/LOGO_DAT.BIN", bmp_image_offset, bmp_image_size) then sj.error("Image data save error!") end
ENDLUA
LUA ALLPASS
function make_pic_files (fileName, needPal, needPic)
local fileNameBMP = "'" .. fileName .. ".bmp" .. "'"
local fileNamePAL = fileName .. "_PAL.BIN"
local fileNameDAT = fileName .. "_DAT.BIN"
local bmp_width, bmp_height, bmp_image_size, bmp_image_offset, bmp_colors = Get_bmp8bit_values (fileNameBMP)
if needPal == 1 then
if bmp_width ~= 128 then sj.error(fileNameBMP .. "Invalid BMP width", bmp_width) end
if bmp_height ~= 72 then sj.error(fileNameBMP .. "Invalid BMP height", bmp_height) end
if bmp_colors ~= 256 then sj.error(fileNameBMP .. "Invalid BMP number of colors", bmp_colors) end
if not File_save(fileNameBMP, fileNamePAL, bmp_image_offset-1024, 1024) then
sj.error(fileNameBMP .. "Palete save error!")
end
end
if needPic == 1 then
local correctWidth = ((bmp_width*3)%4)+bmp_width
if correctWidth > bmp_width then
File_save(fileNameBMP, fileNameDAT, bmp_image_offset, bmp_image_size, bmp_width, correctWidth-bmp_width)
else
File_save(fileNameBMP, fileNameDAT, bmp_image_offset, bmp_image_size)
end
end
print("Resolution: " .. bmp_width .. "x" .. bmp_height, fileNameDAT)
end
ENDLUA
MODULE MAIN_LOGO
Pallete:
INCBIN 'Build/Bin/LOGO_PAL.BIN'
.length EQU $-Pallete
Raster:
INCBIN 'Build/Bin/LOGO_DAT.BIN'
.length EQU $-Raster
IF Pashalki
; !TODO ᤥ« âì âãâ â ¡«¨çªã-áá뫪¨ ­  ­ã¦­ãî â ¡«¨æã á¯à ©â®¢ ¨ § ¢ï§ âì íâ® ­  ¤ âë
MACRO _PASHALKI_CODE
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
ld e,(RebootDate.month)
SLA e
xor a
ld
EX AF,AF'
OUT (SLOT3),A
ENDM
months_table:
WORD days_table.January
WORD days_table.February
WORD days_table.March
WORD days_table.April
WORD days_table.May
WORD days_table.June
WORD days_table.July
WORD days_table.August
WORD days_table.September
WORD days_table.October
WORD days_table.November
WORD days_table.December
days_table:
.January: DZ 1,2,3,4,5,6,7
.February EQU 0
.March EQU 0
.April EQU 0
.May EQU 0
.June EQU 0
.July EQU 0
.August EQU 0
.September EQU 0
.October EQU 0
.November EQU 0
.December: DZ 31
NewYear: INCLUDE './src/bios/logo/use/New_Year.inc'
;.March8: INCLUDE './src/bios/logo/use/March_8.inc'
ENDIF
/*
and a
ld b,0
ld hl,months_table
ld de,months_table+1
ld a,month
call FIND_NEXT
ld hl,days_table
adc hl,de
ld ix,hl
ld e,(hl)
inc hl
ld d,(hl)
ex de,hl
ld de,days_table+1
ld a,day
call FIND_NEXT
ld hl,sprites_table
adc hl,de
call Sprites ; ¢ hl  ¤à¥á ¢ â ¡«¨æ¥  ¤à¥á®¢ â ¡«¨æ á¯à ©â®¢ (SP_Table)
FIND_NEXT:
ld c,(hl) ; ¡¥àñ¬ ¤«¨­ã â ¡«¨æë BYTE
inc hl
CPIR
jr nz,.nothing
sbc hl,de
sla l
ex de,hl
ret
days_table:
WORD december_days_table
WORD january_days_table
WORD march_days_table
WORD december_days_table
;----------------[Months table]----------------[v]
months_table:
BYTE months_table.length-1
.months:
BYTE 01 ; Ÿ­¢ àì
BYTE 03 ; Œ àâ
BYTE 12 ; „¥ª ¡àì
.length equ $-months_table
ASSERT months_table.length < 14, ERROR!!! "months_table" should be less than 14 bytes!
;----------------------------------------------[^]
;-------------[December days table]------------[v]
december_days_table:
BYTE december_days_table.length-1
.months:
BYTE 31 ; <20>®¢ë© £®¤
.length equ $-december_days_table
ASSERT december_days_table.length < 33, ERROR!!! "december_days_table" should be less than 33 bytes!
;----------------------------------------------[^]
;-------------[January days table]-------------[v]
january_days_table:
BYTE january_days_table.length-1
.months:
BYTE 01 ; <20>®¢ë© £®¤
BYTE 02 ; <20>®¢ë© £®¤
BYTE 03 ; <20>®¢ë© £®¤
BYTE 04 ; <20>®¢ë© £®¤
BYTE 05 ; <20>®¢ë© £®¤
BYTE 06 ; <20>®¢ë© £®¤
BYTE 07 ; <20>®¦¤¥á⢮
.length equ $-january_days_table
ASSERT january_days_table.length < 33, ERROR!!! "january_days_table" should be less than 33 bytes!
;----------------------------------------------[^]
;-------------[March days table]------------[v]
march_days_table:
BYTE december_days_table.length-1
.months:
BYTE 08 ; Š« à  –¥âª¨­ ¨ <20>®§  ‹îªá¥¬¡ãà£
.length equ $-december_days_table
ASSERT december_days_table.length < 33, ERROR!!! "december_days_table" should be less than 33 bytes!
;----------------------------------------------[^]
*/
ENDMODULE

View File

@ -0,0 +1,4 @@
@echo off
del *.bin /s
del *.lst /s
del *.log /s

View File

@ -0,0 +1,4 @@
Extractor BMP-files for Sprinter BIOS logo
Copyright (c) 2022 Sprinter Team
File [psfathers.bmp], found 8 bit BMP 128x72, output RGB4 [LOGO_PAL.BIN] and [LOGO_DAT.BIN]
Done.

23
Crazy BIOS/logo/make.cmd Normal file
View File

@ -0,0 +1,23 @@
rem @echo off
set BIN=..\..\bin
set LOG=compile.log
for /F %%i in ('date /t') do set mydate=%%i
for /F %%i in ('time /t') do set mytime=%%i
set mydt=%mydate% %mytime%
rem set LOGO_FILE=peters.bmp
set LOGO_FILE=psfathers.bmp
echo 5. [1/1] BMP LOGO
echo %mydt%: [1/1] BMP LOGO > %LOG%
%BIN%\bmp_extract.exe %LOGO_FILE% /pn LOGO_PAL.BIN /dn LOGO_DAT.BIN /pt 4 >> %LOG%
if errorlevel 1 goto error
goto quit
:error
echo ERROR during compile BMP LOGO
pause 0
exit 3
:quit

BIN
Crazy BIOS/logo/peters.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
Crazy BIOS/logo/psclean.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>נ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>נ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ס<EFBFBD>ננ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ננ<EFBFBD>נ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ה<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ה<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ה<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ה<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ה<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ס<EFBFBD><EFBFBD>ה<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ה<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ה<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ה<EFBFBD><EFBFBD>ס<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ס<EFBFBD><EFBFBD>ה<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>מ<EFBFBD><EFBFBD>ה<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ה<EFBFBD><EFBFBD>מ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ו<EFBFBD>המ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>מה<EFBFBD>ו<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ¢¢־ה<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ה־¡¨ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¨ְ¨־nה<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ו\־¨־¨<D6BE><C2A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־־s¨µה<C2B5><D794><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ה§µs™ּ¢־<C2A2><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱֱ÷ns3¡הְ<D794><D6B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶה¨3sd÷ֱ־<D6B1><D6BE><EFBFBD><EFBFBD><EFBFBD>־µ÷3~\Tּ<54>¨<EFBFBD><C2A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¨<EFBFBD>ּTi~3µ»־<C2BB><D6BE><EFBFBD><EFBFBD>®±y±±־׳§<D7B3><C2A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ׳־¡ָy¡¡¢<C2A1><C2A2><EFBFBD>µֶKi¡ndˆ÷׳¢<D7B3><C2A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¢׳¨™dd†@ְ»<D6B0>ֱ¨K׀ְ™~n־ּ¢»<C2A2><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־¢ֱּ~ְ׳Ty»ֱ¨־@<40>׀s¢¨ֶ¢¢<C2A2><C2A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷™ֶ¢¨~ּ¡n<C2A1>K־µ־7׳yױ†~\ְ¹§־<7F><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ»q~yו~׳µְְֱ~™\\־÷~¢<C2A2><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>™™~÷ֱnTˆˆֱּˆֱ³<D6B1>־Tּ‰sK3־÷\™<E280BA><E280BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¢ˆn¹־3Ks׳ˆ<D6BC><CB86><EFBFBD>¨־ˆ¨ּ™nֹµs™y<79><E28098><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i~®ֱn™ְ÷־¨<D6BE><C2A8><EFBFBD><EFBFBD>־™®@<40>מ־~׳ְy~n™\¨<><C2A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µd‰~y÷׳~ְמ<D6B0>K¢¢־<C2A2><D6BE><EFBFBD><EFBFBD>»ּ\÷K¨µˆ־÷y~y™n\™µֱ־<D6B1><D6BE>־ֱµTK™~‰÷ּˆ¨÷@®¡Tֱֶ<D6B6><D6B1><EFBFBD><EFBFBD>¡ְ7הyµ<79>~־ְss~‘™‘‘‘ˆ‰‘ˆ™‘™™~s÷־~׀µˆה@÷¨<C3B7><C2A8><EFBFBD><EFBFBD>»÷3ּ§ּ<C2A7>™~±ױְ־®nssn\TTTTnnyssµֱֹ¸ױ~~׀׀§ּ3®ֱ<C2AE><D6B1><EFBFBD><EFBFBD>»־\ˆּ¢~3\ysn¢÷־µ®¢idTsnddi¢®µ־÷¨ssy\3~׀K־»<D6BE><C2BB><EFBFBD><EFBFBD><EFBFBD>µְyKּּּ™sn‰÷־÷׳¹ֶ®®ֶ÷׳÷־÷ds†ּ‰ּּTq÷¹<C3B7><C2B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ְֶ÷T¨<54>®\µ׳~nו¥¡iµ§ֹֹ¨¨q¸ױ†~׳÷\®ה¨T¹ְ־<D6BE><E280BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¨÷ְ3~§<>dsָָdˆ¹ױױֹˆdiֲױn\<5C>§ˆ7÷¨÷¨<E280BA><C2A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ¨yּ7¹ו<C2B9>ns~ֱּ¹׀<C2B9>¹ְ־~yyT<79>ך¹@ְ¢»<C2A2><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¨־T<D6BE>s§™737ˆ<37>@\™™\@<>733~§ˆ<CB86>\־¨<D6BE><C2A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷µ@־ְ‘¢‘ֶֶו›~¹¹T@§ֱ™‘וּּ‘¡‘ְ׳@¨ֱ<C2A8><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־¢ְ¢@¨¨³iּ3§ָמ~sוו§3ּs¡³¨@¢÷¨־<C2A8><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¨ְֱ÷¡ְֲ3Kˆ<CB86><E284A2>ˆd3־±³³ֶ÷¨<E280BA><C2A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»¨§־3@׳y77¢÷¨®73y<33>K7־¨¨³<C2A8><C2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>³־\³׳ְְְְּּ׳÷ˆKּ»<D6BC><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¨־n333־¨¡־373\ְµ<D6B0><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־yױ־¸ױ׳±¸<D6BE><E280BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»»÷־ְְּµ»ֱ<C2BB><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ»ְֱֱ÷»ֱ<C2BB><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»¢¢»<C2A2><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>黢觋犄<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>耨耩鼷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>冼褓毗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>禀冼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>霹佴毗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

View File

@ -0,0 +1,16 @@
MODULE _mNewYear
LUA PASS1
make_pic_files ("./src/bios/logo/use/NY_Kokoshnik", 0, 1)
make_pic_files ("./src/bios/logo/use/NY_mustache", 0, 1)
print()
ENDLUA
BYTE 2 ; ª®«¨ç¥á⢮ á¯à ©â®¢
EasterTable 48, 42, 13, 2, sprite1
EasterTable 37, 6, 69, 26, sprite2
sprite1: INCBIN './src/bios/logo/use/NY_Kokoshnik_DAT.bin'
sprite2: INCBIN './src/bios/logo/use/NY_mustache_DAT.bin'
ENDMODULE
;

16
Crazy BIOS/mem_map.txt Normal file
View File

@ -0,0 +1,16 @@
#10 - EXTENSION
#11 - LOGO #2800 bytes
#12 - sp_128
#13 - sp_48
#14 - sp_trd
#15 - ROM Disk Recovery
#16 - ROM Disk Recovery
#17 - ROM Disk Recovery
#18 - BIOS
#19 - ROM Disk Recovery
#1A - ROM Disk Recovery
#1B - ROM Disk Recovery
#1C - Loader #100 bytes, bitstream #3F00 bytes
#1D - Bitstream #4000 bytes
#1E - Bitstream #4000 bytes
#1F - Bitstream #4000 bytes

5
Crazy BIOS/rom/BIOS.inc Normal file
View File

@ -0,0 +1,5 @@
;WITH_BUILD EQU 1 ;BIOS NUMBER INCLUDED BUILD NUMBER
TEST_Build EQU 0
Logo_X_size EQU 128
Logo_Y_size EQU 72
;WITH_2IDE EQU 1 ;SECONDARY IDE

View File

@ -0,0 +1,71 @@
;
; ÛÛÛÛÛÛ» ÛÛÛÛÛÛ» ÛÛÛ» ÛÛÛ» ÛÛÛ» ÛÛÛ» ÛÛÛÛÛ» ÛÛÛÛÛÛ»
; ÛÛÉÍÍÛÛ»ÛÛÉÍÍÍÛÛ»ÛÛÛÛ» ÛÛÛÛº ÛÛÛÛ» ÛÛÛÛºÛÛÉÍÍÛÛ»ÛÛÉÍÍÛÛ»
; ÛÛÛÛÛÛɼÛÛº ÛÛºÛÛÉÛÛÛÛÉÛÛº ÛÛÉÛÛÛÛÉÛÛºÛÛÛÛÛÛÛºÛÛÛÛÛÛɼ
; ÛÛÉÍÍÛÛ»ÛÛº ÛÛºÛÛºÈÛÛɼÛÛº ÛÛºÈÛÛɼÛÛºÛÛÉÍÍÛÛºÛÛÉÍÍͼ
; ÛÛº ÛÛºÈÛÛÛÛÛÛɼÛÛº Èͼ ÛÛº ÛÛº Èͼ ÛÛºÛÛº ÛÛºÛÛº
; Èͼ Èͼ ÈÍÍÍÍͼ Èͼ Èͼ Èͼ ÈͼÈͼ ÈͼÈͼ
;
ROM_MAP:
.EXP EQU 0
.ROM EQU 0
.LOADER EQU 0
.LOGO EQU 0
IF PACKED_MAIN
.SETUP EQU #1000
ELSE
.SETUP EQU BLOCK_Setup
ENDIF
;
;
; ÛÛÛ» ÛÛÛ»ÛÛÛÛÛÛÛ»ÛÛÛ» ÛÛÛ» ÛÛÛ» ÛÛÛ» ÛÛÛÛÛ» ÛÛÛÛÛÛ»
; ÛÛÛÛ» ÛÛÛÛºÛÛÉÍÍÍͼÛÛÛÛ» ÛÛÛÛº ÛÛÛÛ» ÛÛÛÛºÛÛÉÍÍÛÛ»ÛÛÉÍÍÛÛ»
; ÛÛÉÛÛÛÛÉÛÛºÛÛÛÛÛ» ÛÛÉÛÛÛÛÉÛÛº ÛÛÉÛÛÛÛÉÛÛºÛÛÛÛÛÛÛºÛÛÛÛÛÛɼ
; ÛÛºÈÛÛɼÛÛºÛÛÉÍͼ ÛÛºÈÛÛɼÛÛº ÛÛºÈÛÛɼÛÛºÛÛÉÍÍÛÛºÛÛÉÍÍͼ
; ÛÛº Èͼ ÛÛºÛÛÛÛÛÛÛ»ÛÛº Èͼ ÛÛº ÛÛº Èͼ ÛÛºÛÛº ÛÛºÛÛº
; Èͼ ÈͼÈÍÍÍÍÍͼÈͼ Èͼ Èͼ ÈͼÈͼ ÈͼÈͼ
;
MEM_MAP:
.SETUP EQU COMPILE_ADDR.SETUP
;.ID_Version EQU COMPILE_ADDR.EXP + #C0
;
; ÛÛÛÛÛÛ» ÛÛÛÛÛÛ» ÛÛÛÛÛÛ» ÛÛÛÛÛÛÛ»
; ÛÛÉÍÍÍÛÛ»ÛÛÉÍÍÛÛ»ÛÛÉÍÍÍͼ ÛÛÉÍÍÍͼ
; ÛÛº ÛÛºÛÛÛÛÛÛɼÛÛº ÛÛÛ»ÛÛÛÛÛÛÛ»
; ÛÛº ÛÛºÛÛÉÍÍÛÛ»ÛÛº ÛÛºÈÍÍÍÍÛÛº
; ÈÛÛÛÛÛÛɼÛÛº ÛÛºÈÛÛÛÛÛÛɼÛÛÛÛÛÛÛº
; ÈÍÍÍÍͼ Èͼ Èͼ ÈÍÍÍÍͼ ÈÍÍÍÍÍͼ
;
COMPILE_ADDR:
.EXP EQU 0
.ROM EQU 0
.LOADER EQU 0
.MAIN EQU #8000
.SETUP EQU #8000
.DEPACK EQU #D000
.SETUP_STARTER EQU #C000
;
; ÛÛÛÛÛÛ» ÛÛÛÛÛÛÛ»ÛÛÛÛÛÛ» ÛÛÛÛÛ» ÛÛÛÛÛÛ»ÛÛ» ÛÛ»ÛÛÛÛÛÛÛ»ÛÛÛÛÛÛ»
; ÛÛÉÍÍÛÛ»ÛÛÉÍÍÍͼÛÛÉÍÍÛÛ»ÛÛÉÍÍÛÛ»ÛÛÉÍÍÍͼÛÛº ÛÛɼÛÛÉÍÍÍͼÛÛÉÍÍÛÛ»
; ÛÛº ÛÛºÛÛÛÛÛ» ÛÛÛÛÛÛɼÛÛÛÛÛÛÛºÛÛº ÛÛÛÛÛɼ ÛÛÛÛÛ» ÛÛÛÛÛÛɼ
; ÛÛº ÛÛºÛÛÉÍͼ ÛÛÉÍÍͼ ÛÛÉÍÍÛÛºÛÛº ÛÛÉÍÛÛ» ÛÛÉÍͼ ÛÛÉÍÍÛÛ»
; ÛÛÛÛÛÛɼÛÛÛÛÛÛÛ»ÛÛº ÛÛº ÛÛºÈÛÛÛÛÛÛ»ÛÛº ÛÛ»ÛÛÛÛÛÛÛ»ÛÛº ÛÛº
; ÈÍÍÍÍͼ ÈÍÍÍÍÍͼÈͼ Èͼ Èͼ ÈÍÍÍÍͼÈͼ ÈͼÈÍÍÍÍÍͼÈͼ Èͼ
;
IF PACKED_MAIN
IFNDEF PREBUILD ; ­¥¨§¢¥áâ­ë¥ ¬¥âª¨ ¯à¨ ¯à¥ª®¬¯¨«ï樨 MAIN.BIN
DEPACKER:
.Addr EQU SETUP_MAIN.Depacker
.WorkAddr EQU COMPILE_ADDR.DEPACK
.PackedMAIN EQU UnPacker.PackedMAIN
.UnpackAddr EQU COMPILE_ADDR.MAIN
.CodeLength EQU UnPacker.Length
.UnpackedEXECaddr EQU MAIN_START
.Length EQU DEPACK_DATA.length
;Depacker_start EQU #D000
;Depacked_logo_start EQU #D900
ENDIF
ENDIF

427
Crazy BIOS/rom/ROM.asm Normal file
View File

@ -0,0 +1,427 @@
;
; MODULE ROM_PART
;------------[Begin of ROM]-------------
ROM_START:
DI
HALT
;---------------------------------------
;--------------[checksum]---------------
BLOCK 4-$,#FF
Check_Sum:
DB #FF,#FF,#FF,#FF ; ¬¥áâ® ¤«ï ª®­â஫쭮© á㬬ë
;---------------------------------------
BLOCK #10-$,#FF
RET
;---------------------------------------
;!TODO ¯à¨ªàãâ¨âì ª ROM.BIOS
;----------------[int]------------------
BLOCK #38-$,#FF
; INT: PUSH BC
; PUSH AF
; LD C,SLOT3
; IN B,(C)
; LD A,SYS_PAGE
; OUT (C),A
; LD A,(SYS_PAGE.INT_ID)
; CP #AA
; JR Z,YESINT
; OUT (C),B
; JR NOINT
; YESINT: PUSH HL
; LD HL,(SYS_PAGE.INT_ADRESS)
; LD A,H
; OR L
; LD A,(SYS_PAGE.INT_PAGE)
; OUT (C),B
; CALL NZ,EXTINT
; POP HL
; NOINT: POP AF
; POP BC
EI
RETI
;---------------------------------------
;----------------[NMI]------------------
_mInfoBLOCK #66-$,#FF
NMI: RETN
;---------------------------------------
; ;----------------[int]------------------
; EXTINT: OR A
; RET Z
; ;LD C,SLOT1
; BIT 7,H
; JR Z,.L2
; LD C,SLOT2
; BIT 6,H
; JR Z,.L1
; LD C,SLOT3
; .L1: IN B,(C)
; PUSH BC
; OUT (C),A
; CALL .JPHL
; POP BC
; OUT (C),B
; RET
; ; ¯à®¢¥àª  ­  ­ã«¥¢®© á«®â
; .L2: BIT 6,H
; LD C,SLOT1
; JR NZ,.L1 ; ¯à®¤®«¦ ¥¬ ¥á«¨ ­¥­ã«¥¢®© á«®â
; ; ‚Ž’ ’“’ ŒŽ†<C5BD>Ž <E280B9>ˆœ <20><>Ž…„“<E2809E>“ „‹Ÿ <20>Ž„<E28099>ŽŠˆ <E28098><EFBFBD>ˆ SLOT0 ˆ
; ; <20><EFBFBD>…•Ž„ <20>Ž <20><><EFBFBD><E2809A>ˆž Ž<><C5BD><EFBFBD>ŽˆŠ <20>Žœ‡ŽŸ —…<E28094>…‡ ¯à®æ¥¤ãàã ­  áâíª, ­ ¯à¨¬¥à
; IF TEST_INT
; LD HL,-.stackDepth - .switchProcedure.size + .patch+2
; ADD HL,SP
; PUSH HL
; LD HL,-.stackDepth - .switchProcedure.size ; memory stack use!
; ADD HL,SP ; stack
; PUSH HL ;  ¤à¥á ¯à®£à ¬¬ë .readProcedure
; LD DE,.switchProcedure ; ¯¥à¥­¥á⨠¯à®£à ¬¬ã ­  á⥪
; EX DE,HL
; LD BC,.switchProcedure.size
; LDIR
; RET
; ; ¯à®æ¥¤ãà , ¯¥à¥­®á¨¬ ï ­  á⥪ ¤«ï ¢ë§®¢  ¯à¥à뢠­¨ï ¯®«ì§®¢ â¥«ï ¨§ SLOT0
; ; ®áâ®à®¦­¥¥ á PUSH, ¥á«¨ ­ ¤® ¬­®£®, ⮠㢥«¨ç¨¢ © .stackDepth
; .switchProcedure:
; DEC DE
; POP HL
; LD (HL),E
; INC HL
; LD (HL),D
; LD C,SLOT0
; IN B,(C)
; PUSH BC
; OUT (C),A
; XOR A
; OUT (SYS_PORT.RAM),A
; .patch EQU $+1-.switchProcedure
; CALL .JPHL
; DI
; XOR A
; OUT (SYS_PORT.ROM),A
; POP BC
; OUT (C),B
; RET
; .JPHL: JP (HL)
; .stackDepth EQU 32 ; à ááâ®ï­¨¥ ®â ª®­æ  ¯à®æ¥¤ãàë ¤® ¢¥à設ë á⥪ .
; .switchProcedure.size EQU $-.switchProcedure
; ELSE
; SCF
; RET
; .JPHL: JP (HL)
; ENDIF
;---------------------------------------
/*
*/
;
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;
;
;----------------------------[ FOR ZX-MODE ]----------------------------;
;!HARDCODE ­  íâ®â  ¤à¥á #0 ¯à룠¥â ¢ vROM Basic-48 ¯®  ¤à¥áã #3CF0
; ¬®¦­® ¯®¯à®¡®¢ âì ¯¥à¥¤¥« âì íâ®â  ¤à¥á â ¬
_mInfoBLOCK #C0-$,#FF ;!TEST 0
INCLUDE 'ZX/ZX_FUNC.ASM'
INCLUDE 'ZX/ZX_MENU.ASM'
;-----------------------------------------------------------------------;
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;
;
;-------------[#1000 SETUP]-------------
ShowInfo 'Setup block of ROM start', 0 ; !!!!! test
BLOCK_Setup EQU $
;
IF PACKED_MAIN
BLOCK ROM_MAP.SETUP-$,#FF
DISP COMPILE_ADDR.SETUP
; Depacker version
SETUP_MAIN:
LD HL,DEPACKER.UnpackedEXECaddr; â®çª  ¢å®¤  ¢ à á¯ ª®¢ ­­®¬ ª®¤¥
PUSH HL
LD DE,DEPACKER.WorkAddr ;  ¤à¥á ¯à®æ¥¤ãàë ¤¥¯ ª¥à 
PUSH DE
LD HL,DEPACKER.Addr
LD BC,DEPACKER.Length
LDIR
LD HL,DEPACKER.PackedMAIN ; £¤¥  à娢
LD DE,DEPACKER.UnpackAddr ; ªã¤  à á¯ ª®¢ë¢ âì
RET
.Depacker EQU $
ENT
;-----------------[v]
DEPACK_DATA:
DISP DEPACKER.WorkAddr
MODULE UnPacker
INCLUDE 'src/bios/ROM/SETUP/DEHRUST.asm' ; !TODO ᤥ« âì ­  LUA  ¢â®¢ë¡®à ¤¥ª®¬¯à¥áá®à  ¨ ª®¬¯à¥áá®à 
PackedMAIN: INCBIN 'Build/Bin/temp/MAIN.PAK'
ENDMODULE
ENT
DEPACK_DATA.length EQU $-DEPACK_DATA
;-----------------[^]
ELSE
DISP COMPILE_ADDR.SETUP
ShowInfo 'Setup block DISP start', 1 ; !!!!! test
SETUP_MAIN: INCLUDE 'src/bios/ROM/SETUP/Main.asm'
ShowInfo 'Setup block DISP end', 1 ; !!!!! test
ENT
ENDIF
ShowInfo 'Setup block of ROM end', 0 ; !!!!! test
BLOCK_Setup.Length EQU $-BLOCK_Setup
;---------------------------------------
;
;
; !FIXIT ᤥ« âì í⨠䨪á¨à®¢ ­­ë¥  ¤à¥á  ®â¤¥«ì­ë¬ ä ©«®¬ ¨ á IF/ELSE ¨ ¯®¤ª«îç âì ¨å ¯®â®¬ ªã¤  ­ ¤®.
;----------------------------------------------------------------------;
; BLOCK #3CC0-$,255
; no-magics!
;MAGIC_1: ; ‡€ƒ‹“˜Š€ „‹Ÿ MAGIC
; PUSH AF
; LD A,ROM.EXT
; OUT (SYS_PORT.OFF),A
; POP AF
; JP MAGIC_1
;MAGIC_3:
; PUSH AF
; LD A,ROM.EXT
; OUT (SYS_PORT.OFF),A
; POP AF
; RETN
;MAGIC_2:
;; CALL MG_BEGIN
; JR MAGIC_3
;*************************
_mInfoBLOCK #3CE0-$,#FF ;!TEST 0
;SW_ROM_1:
LD HL,#259F ;!HARDCODE Show Main Menu in BASIC-128
PUSH HL
LD HL,#5B00 ;!HARDCODE
LD A,(HL)
CP #F5 ; #F5 - ®¯ª®¤ 'PUSH AF'. <20>஢¥àï¥âáï ¢ #5B00
JR Z,JP_HL_48 ; އ<E280A1> Š Œ…<C592>ž BASIC128
POP HL
JR SW_ROM ; <20><>ŽŽ‰ އ<E280A1>
;*************************
_mInfoBLOCK #3CF0-$,#FF ;!TEST 0
;JMP_48:
; LD HL,00h
; JR JP_HL_48
;
; NOP
; NOP
; NOP
;***************************************
_mInfoBLOCK #3CF8-$,#FF ;!TEST 0
; no basic-48!
;P_HL_48:
PUSH HL
;SW_ROM:
PUSH AF
LD A,ROM.BIOS
OUT (SYS_PORT.RAM),A
POP AF
RET
;***************************************
;----------------------------------------------------------------------;
;
;!TODO ᯥªâà㬮¢áª¨¥ ã⨫¨âë
;----------------------------------------------------------------------;
; _mInfoBLOCK #3CFA-$,#FF
; LD A,0 ;!HARDCODE
; OUT (SYS_PORT.OFF),A
; POP AF
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
_mInfoBLOCK #3D00-$,#FF
;DOS_ON:
NOP
RET
;***************************************
;***************************************
; BLOCK #3D02-$,FF
; !TODO ¬®¦­® ®¯à¨å®¤®¢ âì âãâ 17 ¡ ©â®¢
;
;***************************************
;***************************************
_mInfoBLOCK #3D13-$,#FF
NOP
CALL ToBIOS_FromEXT
JP DOS_OFF
;***************************************
;***************************************
; BLOCK #3D17-$,FF
; !TODO ¬®¦­® ®¯à¨å®¤®¢ âì âãâ 233 ¡ ©â 
;
;***************************************
;***************************************
_mInfoBLOCK #3E00-$,#FF
;DOS_OFF:
PUSH AF
LD A,R
DI
PUSH AF
PUSH BC
;
LD BC,(#5BFF) ; !HARDCODE
LD A,#C9 ; Opcode RET
LD (#5BFF),A ; !HARDCODE
CALL #5BFF ; !HARDCODE
LD (#5BFF),BC ; !HARDCODE
;
POP BC
POP AF
JP PO,.no_EI
EI
.no_EI: POP AF
RET
;***************************************
;***************************************
; BLOCK #3E16-$,FF
; !TODO ¬®¦­® ®¯à¨å®¤®¢ âì âãâ 10 ¡ ©â®¢
;
;***************************************
;
;
;---------------------------------------
; _mInfoBLOCK #3FC6-$,#FF
;!FIXIT ¯¥à¥¤¥« âì <20>‡“ âà¤®á  ¨ ᯥªâà㬮¢ ¯®¤ ¯à ¢¨«ì­ë© ¢ë§®¢ ä㭪権 ¡¨®á  (  ­¥ ¢¬¥áâ® ä㭪権 4x ä㭪樨 0x)
; ¨«¨ ¬®¦­® ¤®¡ ¢¨âì ä㭪樨
; TRDOS_HD_CMD:
; ; LD A,C
; ; OR #40
; ; LD C,A
; POP AF
; SET 6,C
; RST_to_BIOS
; JR RET_TO_TRDOS
;---------------------------------------
;
;--------------[GOTO BIOS]--------------
; call BIOS from EXTENSION
_mInfoBLOCK #3FD0-$,#FF ; ToBIOS_FromEXT
PUSH AF
LD A,ROM.BIOS ; set BIOS to slot0
OUT (SYS_PORT.ROM),A
POP AF
RET
;---------------------------------------
;!FIXIT ¯¥à¥¤¥« âì <20>‡“ âà¤®á  ¨ ᯥªâà㬮¢ ¯®¤ ¯à ¢¨«ì­ë© ¢ë§®¢ ä㭪権 ¡¨®á  (  ­¥ ¢¬¥áâ® ä㭪権 4x ä㭪樨 0x)
;--------[ From TR-DOS to HDD part2]--------
_mInfoBLOCK #3FD8-$,#FF
TRDOS_HD_CMD:
POP AF
SET 6,C
RST_to_BIOS
JR RET_TO_TRDOS
;---------------------------------------
;!FIXIT ®áâ âª¨ ®â â¥á⮢ ˆ¢ ­  á® §¢ãª®¢®© ª à⮩
;-------------[SND_TEST_RET]-------------
_mInfoBLOCK #3FE0-$,#FF
; SND_TEST_RET:
; LD A,ROM.BIOS
; OUT (SYS_PORT.RAM),A
; ;JP SOUND_TEST
; JP #0000
;---------------------------------------
;------------[HDD_5x portal]------------
; â®çª  ¢å®¤ /¢ë室  ¤«ï ä㭪権 5å ¨§ BIOS
_mInfoBLOCK #3FE8-$,#FF
;RET_TO_EXP:
; PUSH AF
; LD A,ROM.BIOS
; OUT (SYS_PORT.ROM),A
; JP HDD_FN_5x
;---------------------------------------
;!FIXIT Œ®¦­® ¯®¯à ¢¨âì ­®¬¥à  ä㭪権 ¯à¨ ¢ë§®¢ å ¨§ TR-DOS ¨ ¯à룠âì áà §ã ¢ BIOS
;-------[ From TR-DOS to API 4x ]-------
_mInfoBLOCK #3FF0-$,#FF
RET_TO_TRDOS:
PUSH AF
DI
LD A,ROM.BIOS
OUT (SYS_PORT.RAM),A
JR TRDOS_HD_CMD ; âãâ ­¥ 墠⨫® ¬¥áâ  ¢ 1 ¡ ©â, ç⮡ áà §ã ᤥ« âì JP
;---------------------------------------
;-----[???????????????????????????]-----
_mInfoBLOCK #3FF8-$,#FF
; PUSH AF
; LD A,ROM.BIOS
; OUT (SYS_PORT.RAM),A
; JP #0000
;---------------------------------------
_mInfoBLOCK #4000-$,#FF
;=======================================
; ENDMODULE ;ROM_PART
;

View File

@ -0,0 +1,916 @@
;[BEGIN]
;//MODULE: AUTOIDE
;//CREATE: 27-07-2001 AUTHOR: Denis Parinov
;-----------------------------------------------------------------------
;Rev Date Name Description
;-----------------------------------------------------------------------
;R02 17.08.2023 BAO New AUTODETECT ATA/ATAPI procedure
;R01 01.08.2001 DNS FIX BUG INT "SELECT_IDE"
;R00 24.07.2001 DNS ADD SECONDARY IDE
; 24.07.2001 DNS INITIAL NEW VERSION 2.48
;=======================================================================
; MODULE AUTOIDE
/*
;Write
HDW_3F7 EQU #4155 ;3F7H Command
HDW_3F6 EQU #4154 ;3F6H Device Control
;Read
HDR_3F7 EQU #4055 ;3F7H Drive Address
HDR_3F6 EQU #4054 ;3F6H Alt. Status
;Write
IDE.Write.Command EQU #4153 ; #1F7 Command
HDW_DRV EQU #4152 ; #1F6 Drive Control
HDW_CLH EQU #0155 ; #1F5 Cylinder High
HDW_CLL EQU #0154 ; #1F4 Cylinder Low
HDW_SEC EQU #0153 ; #1F3 Sector
HDW_CNT EQU #0152 ; #1F2 Counter
HDW_ERR EQU #0151 ; #1F1 Error
HDW_DAT EQU #0150 ; #1F0 Data
;Read
HDR_CTL EQU #4053 ; #1F7 Status (Control)
HDR_DRV EQU #4052 ; #1F6 Drive Control
HDR_CLH EQU #0055 ; #1F5 Cylinder High
HDR_CLL EQU #0054 ; #1F4 Cylinder Low
HDR_SEC EQU #0053 ; #1F3 Sector
HDR_CNT EQU #0052 ; #1F2 Counter
HDR_ERR EQU #0051 ; #1F1 Error
HDR_DAT EQU #0050 ; #1F0 Data
;Bits for HDR_CTL
;---[]
BSY EQU 7
RDY EQU 6
DRQ EQU 3
ERR EQU 0
;---[]
HDD EQU 1
CDROM EQU 2
;EQU FOR IY+
;---[]
DRVHD_H EQU 0
SC_PT_H EQU 1
IDE.HDD_INIT_TABLE.HeadsNumber EQU 2
CYL_L_H EQU 3
CYL_H_H EQU 4
SPCLL_H EQU 5
SPCLH_H EQU 6
DTYPE_H EQU 7
;---[]
;-------[ ;!!!!! hardcoded table]-------
IDE0 EQU #C1C0
IDE1 EQU #C1C8
IDE2 EQU #C1D0
IDE3 EQU #C1D8
;---------------------------------------
*/
;IDE0 DB #FF ;DRIVE/HEAD REGISTER ;00
; DB #FF ;SECTORS PER TRACK ;01
; DB #FF ;HEADS ;02
; DB #FF ;CYLINDERS LOW ;03
; DB #FF ;CYLINDERS HIGH ;04
; DB #FF ;SECTOR PER CYLINDER LOW ;05
; DB #FF ;SECTOR PER CYLINDER HIGH ;06
; DB #FF ;DEVICE TYPE ;07
;IDE1 DB #FF ;DRIVE/HEAD REGISTER ;00
; DB #FF ;SECTORS PER TRACK ;01
; DB #FF ;HEADS ;02
; DB #FF ;CYLINDERS LOW ;03
; DB #FF ;CYLINDERS HIGH ;04
; DB #FF ;SECTOR PER CYLINDER LOW ;05
; DB #FF ;SECTOR PER CYLINDER HIGH ;06
; DB #FF ;DEVICE TYPE ;07
MODULE CONFIGURE_IDE_DRIVES
MODULE PAUSES
HALT:
.Time_2s EQU 100
.SMALL EQU 200 ; 04 ᥪ
.BIG EQU 1550 ; 31 ᥪ
WAIT:
.IDE EQU #0000
.SMALL EQU #0200
.ERROR EQU #0400
ENDMODULE
WAIT_IDE EQU #0000
WAIT_SML EQU #1000
WAIT_ERROR EQU #0400
M_CYLL EQU #12
M_CYLH EQU #13
M_HEAD EQU #14
M_SECT EQU #15
S_CYLL EQU #16
S_CYLH EQU #17
S_HEAD EQU #18
S_SECT EQU #19
SM_CYLL EQU #37
SM_CYLH EQU #38
SM_HEAD EQU #39
SM_SECT EQU #3A
SS_CYLL EQU #3B
SS_CYLH EQU #3C
SS_HEAD EQU #3D
SS_SECT EQU #3E
MACRO PAUSE_DJNZ num
IF num<255
LD B,num
.loop: DJNZ .loop
ELSE
ASSERT 0, "WRONG PAUSE NUMBER!!!"
ENDIF
ENDM
/////////////////////////////////////////////////////////////////////[v]
START: CALL SetUP_CHANELS
;
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD HL,IDE.INIT_TBL_IDE0
LD BC,256*(IDE.HDD_INIT_TABLE * 4) + #FF ;R02
;CLEAR HDD VARIABLE
.FILLIDE:
LD (HL),C
INC HL
DJNZ .FILLIDE
EX AF,AF'
OUT (SLOT3),A
LD IY,IDE.INIT_TBL_IDE0
XOR A
CALL STEP1_GETCMOS
LD IY,IDE.INIT_TBL_IDE1
LD A,#01
CALL STEP1_GETCMOS
LD IY,IDE.INIT_TBL_IDE2
LD A,#02
CALL STEP1_GETCMOS
LD IY,IDE.INIT_TBL_IDE3
LD A,#03
CALL STEP1_GETCMOS
;[x] save hdd parameters to cmos for "setup" in settings
CALL WRITING
;
CALL ScreenPOS.CRLF
RET
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
AUTODETECT:
LD A,L ;DETECT MESSAGE
CALL POSTMSG
CALL ScreenPOS.SUBNAME
LD A,(MasterSlave)
;
CALL AUTODETECTING
.IDEJUMPBACK:
CALL NC,MODEL
LD A,(SKIP)
INC A
LD A,msgStrings.ideNone
JR Z,.NOSKIPKEY
LD A,msgStrings.ideSkiped
.NOSKIPKEY:
CALL C,POSTMSG
CALL ScreenPOS.CRLF
RET
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
; !HARDCODE § ¬¥­¨âì ç¨á«  ­  ¬¥âª¨ ¢ í⮩ ¯à®æ¥¤ãà¥
STEP1_GETCMOS:
LD (MasterSlave),A
LD H,A ;SAVE DRIVE NUMBER
CALL SELECT_IDE
LD A,IDE.Device.NONE
LD (IDEDEV),A
LD (SKIP),A
LD A,H
;
AND A
LD BC,CMOS_CELL.DrivesSetup_1.Mask.PriIDEmaster ;#3011
LD L,msgStrings.detectIdePrMA
JR Z,.choose
;
DEC A
LD BC,CMOS_CELL.DrivesSetup_1.Mask.PriIDEslave ;#C011
LD L,msgStrings.detectIdePrSL
JR Z,.choose
;
DEC A
LD BC,CMOS_CELL.DrivesSetup_2.Mask.SecIDEmaster
LD L,msgStrings.detectIdeSecMA
JR Z,.choose
;
DEC A
LD BC,CMOS_CELL.DrivesSetup_2.Mask.SecIDEslave
LD L,msgStrings.detectIdeSecSL
JR Z,.choose
SCF
RET
;0 - AUTODETECT
;1 - GETTING FROM SETUP
;2 - CD-ROM (ATAPI device)
;3 - DISABLED
.choose:
EI
;
CALL G_VALUE
OR A
JR Z,AUTODETECT ;AUTO DETECT
;
DEC A
JR Z,SETUP_FROM_CMOS ;Get from CMOS (SETUP)
;
DEC A
RET NZ ;DON'T CHECK THIS DEVICE
;JR Z,IT_IS_ATAPI ;CD-ROM
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
IT_IS_ATAPI:
LD A,L ;DETECT MESSAGE
CALL POSTMSG
CALL ScreenPOS.SUBNAME
LD HL,PAUSES.HALT.BIG
CALL BITS_WAITS.Clear_BUSY
JR C,AUTODETECTING.IDE_ABSENT
CALL AUTODETECTING.Its_ATAPI
JP AUTODETECT.IDEJUMPBACK
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
AUTODETECTING: CALL DETECTORS.CheckChanel
JR C,.IDE_ABSENT
CALL Bug31SecCheck
JR C,.next
LD HL,PAUSES.HALT.BIG
CALL BITS_WAITS.Clear_BUSY
JR C,.IDE_ABSENT
.next: CALL DETECTORS.Counter
JR C,.IDE_ABSENT
CALL DETECTORS.NOP_Check
JR C,.IDE_ABSENT
; CALL DISABLE_8bit ; DISABLE 8 bit data transfer
CALL DETECTORS.IdentDevCheck
JR C,.IDE_ABSENT
JR Z,.Its_ATA
; enter point for ATAPI in setup
.Its_ATAPI: CALL DETECTORS.IdentPDevChk
JR C,.IDE_ABSENT
LD A,IDE.Device.CDROM
LD (IDEDEV),A
JR .get
.Its_ATA: LD A,IDE.Device.HDD
LD (IDEDEV),A
.get: CALL GETPARAM
JR C,.IDE_ABSENT
;CALL DisableWriteCache
;CALL DisableStandBy
AND A
RET
;
.IDE_ABSENT: LD A,IDE.Device.NONE
LD (IDEDEV),A
LD A,IDE.ATA.Nop
LD BC,IDE.Write.Command
OUT (C),A
DEC B
IN A,(C) ; IDE.Read.Status
SCF
RET
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
SETUP_FROM_CMOS:
LD A,H
LD IX,PRIM_MASTER_CMOS_T
OR A
JR Z,.step1
;
LD IX,PRIM_SLAVE_CMOS_T
CP 1
JR Z,.step1
;
LD IX,SEC_MASTER_CMOS_T
CP 2
JR Z,.step1
;
LD IX,SEC_SLAVE_CMOS_T
.step1: LD HL,TEMP
LD DE,TEMP+1
LD BC,511
LD (HL),0
LDIR
;
CALL Bug31SecCheck
JR C,.step2
;
LD HL,PAUSES.HALT.BIG
CALL BITS_WAITS.Clear_BUSY
JR C,AUTODETECTING.IDE_ABSENT
;
.step2: LD A,(IX+2) ;M_HEAD
CALL READCMS
LD (TEMP+3*2),A ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. HEADS PER TRACK
;
LD A,(IX+1) ;M_CYLH
CALL READCMS
PUSH AF
;
LD A,(IX+0) ;M_CYLL
CALL READCMS
POP HL
LD L,A
LD (TEMP+1*2),HL ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. CYLINDERS
;
LD A,(IX+3) ;M_SECT
CALL READCMS
LD (TEMP+6*2),A ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. SECTOR PER TRACK
;
LD A,IDE.Device.HDD
LD (IDEDEV),A
CALL IDESPEC
RET
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
IDESPEC:
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(IDEDEV)
LD (IY+IDE.HDD_INIT_TABLE.DriveType),A
CP IDE.Device.CDROM
JP Z,.FOR_CDR
;
LD BC,IDE.Read.Control
IN A,(C)
AND #F0
LD B,A
LD A,(TEMP+#06) ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. HEADS PER TRACK
LD (IY+IDE.HDD_INIT_TABLE.HeadsNumber),A
DEC A
AND #0F
OR B
LD B,A
LD A,(TEMP+#63) ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. LBA/NON-LBA bit 1 (FROM ZERO!)
BIT 1,A
JR Z,.NONLBA
;
SET 6,B
.NONLBA: LD A,B
LD BC,IDE.Write.DeviceHead
OUT (C),A
AND #F0 ;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask
LD HL,ICHANEL
OR (HL)
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
LD HL,(TEMP+#02) ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. CYLINDERS
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),L
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),H
LD A,(TEMP+#0C) ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. SECTOR PER TRACK
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A
IF IDE_Optimization
LD B,high IDE.Write.Counter
ELSE
LD BC,IDE.Write.Counter
ENDIF
OUT (C),A
LD A,IDE.ATA.InitializeDeviceParameters
CALL IDE_CMD
LD C,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) ; Sector per track
LD B,0
LD H,B
LD L,B
LD A,(IY+IDE.HDD_INIT_TABLE.HeadsNumber) ; Head per HDD
.loop: ADD HL,BC
DEC A
JR NZ,.loop
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderLow),L
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh),H
.END: ; [x] save hdd parameters to cmos for "setup" in settings
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) ; for save to cmos in GETPARM
;
EX AF,AF'
OUT (SLOT3),A
AND A
RET
;
.FOR_CDR: LD BC,IDE.Read.Control
IN A,(C)
AND #F0
LD HL,ICHANEL
OR (HL)
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
JR IDESPEC.END
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
IDE_CMD:
PUSH AF
LD HL,PAUSES.WAIT.IDE
LD DE,256*IDE.ControlByte.Busy + 0
CALL BITS_WAITS.WAIT_PRT
POP HL
RET C
INC B ; LD BC,IDE.Write.Command
OUT (C),H
LD HL,PAUSES.WAIT.IDE
;LD DE,256*IDE.ControlByte.Busy + 0
JR BITS_WAITS.WAIT_PRT
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
MODEL: LD HL,TEMP+27*2 ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã.
LD A,(HL)
OR A
JR Z,.unknown
LD B,20 ;!HARDCODE
CALL DWPRINT
AND A
RET
.unknown:
LD A,msgStrings.ideUnknown
CALL POSTMSG
AND A
RET
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
BITS_WAITS:
; IN:
; HL - Waiting delay
; DE - MASK : PATTERN
; OUT:
; NC: (PORT & D)-E = 0
; CF: waiting delay exceeded
.WAIT_PRT:
LD BC,IDE.Read.Status
;
.loop: IN A,(C)
AND D
CP E
RET Z
DEC HL
CALL SKIPKEY
RET C
LD A,L
OR H
JP NZ,.loop
;
SCF
RET
;
; Pause for clear BUSY and DATA REQUEST
.Clear_BUSY: LD BC,IDE.Read.Status
IN A,(C)
;!TEST for normal bus with pull-ups
;CP #FF
;SCF
;RET Z
;
AND IDE.ControlByte.Busy; + IDE.ControlByte.DataRequest
RET Z
;
HALT
DEC HL
LD A,H
OR L
SCF
RET Z
;
CALL SKIPKEY
RET C
;
JR .Clear_BUSY
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
SELECT_IDE:
AND A ;%0000'0011
LD B,IDE.Drive.Master
JR Z,.AUTO_0
;
DEC A
LD B,IDE.Drive.Slave
JR Z,.AUTO_0
;
DEC A
;R00
LD B,IDE.Drive.Master
JR Z,.AUTO_1
;
DEC A
LD B,IDE.Drive.Slave
.AUTO_1: LD A,IDE.Chanel.Secondary ;SELECT SECONDARY
OUT (IDE.Chanel.Set),A
JP .AUTO
;
.AUTO_0: LD A,IDE.Chanel.Primary ;SELECT PRIMARY
OUT (IDE.Chanel.Set),A
;
XOR A
.AUTO: LD (ICHANEL),A
;R01
LD A,B
LD BC,IDE.Write.DeviceHead
OUT (C),A
;
RET
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
SKIPKEY:
EXX
CALL SCANKEY
EXX
SCF
CCF
RET Z
EXX
LD HL,#3E00 ;!HARDCODE
AND A
SBC HL,DE
EXX
SCF
CCF
RET NZ
LD A,0
LD (SKIP),A
SCF
RET
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
; [x] save hdd parameters to cmos for "setup" in settings
; IN: A' = DRV_Flags
SaveToCMOS:
LD A,(IDEDEV)
CP IDE.Device.HDD
RET NZ
EX AF,AF'
;LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
AND %0001'0001
LD IX,PRIM_MASTER_CMOS_T
JR Z,.save_to_cmos
;
DEC A
LD IX,SEC_MASTER_CMOS_T
JR Z,.save_to_cmos
;
CP %0001'0000
LD IX,SEC_SLAVE_CMOS_T
JR Z,.save_to_cmos
;
LD IX,PRIM_SLAVE_CMOS_T
.save_to_cmos:
LD HL,(TEMP+1*2)
LD B,L
LD A,(IX+0)
CALL WRITCMS ; Cylinder low
LD B,H
LD A,(IX+1)
CALL WRITCMS ; Cylinder high
LD A,(TEMP+3*2)
LD B,A
LD A,(IX+2)
CALL WRITCMS ; Heads
LD A,(TEMP+6*2)
LD B,A
LD A,(IX+3)
JP WRITCMS ; Heads
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
RESET_Slave_ATAPI:
LD A,IDE.Drive.Slave
LD BC,IDE.Write.DeviceHead
OUT (C),A
PAUSE_DJNZ 16
LD BC,IDE.Write.Command
LD A,IDE.ATAPI.Reset
OUT (C),A
PAUSE_DJNZ 16
LD A,IDE.Drive.Master
LD BC,IDE.Write.DeviceHead
OUT (C),A
RET
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
; Check bug with 31 sec freeze
Bug31SecCheck: LD A,(MasterSlave)
AND 1
RET NZ
;
LD HL,PAUSES.HALT.Time_2s
CALL BITS_WAITS.Clear_BUSY
CCF
RET C
;
JP RESET_Slave_ATAPI
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
GETPARAM:
LD HL,PAUSES.WAIT.IDE
LD DE,IDE.ControlByte.DataRequest * 256 + IDE.ControlByte.DataRequest
CALL BITS_WAITS.WAIT_PRT
RET C
LD BC,IDE.Read.Data
LD HL,TEMP
INIR
INIR
CALL IDESPEC
; [x] save hdd parameters to cmos for "setup" in settings
CALL SaveToCMOS
;
AND A
RET
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
DETECTORS:
;-------;
; CHECK BY COUNTER PORT.
; Exit: CF - No device
.test_counter EQU 5
.Counter: LD A,.test_counter
LD BC,IDE.Write.Counter
OUT (C),A
LD HL,PAUSES.WAIT.SMALL
LD DE,IDE.ControlByte.Busy*256 + 0
CALL BITS_WAITS.WAIT_PRT
RET C
;
LD BC,IDE.Read.Counter ; LD BC,IDE.Read.Counter
IN A,(C)
CP .test_counter
RET Z
SCF
RET
;-------;
;-------;
; CHECK BY EXECUTING NOP COMMAND AND WAIT.
; Exit: CF - No device
.NOP_Check: LD E,IDE.ATA.Nop
LD BC,IDE.Write.Command
OUT (C),E
PAUSE_DJNZ 0
LD HL,PAUSES.HALT.SMALL
LD BC,IDE.Read.Status
;DEC B
;
.loop: IN A,(C)
SCF
RET Z
;
AND IDE.ControlByte.Busy + IDE.ControlByte.DataRequest + IDE.ControlByte.Error
CP IDE.ControlByte.Error
RET Z
;
HALT
DEC HL
LD A,H
OR L
SCF
RET Z ; Absent
;
CALL SKIPKEY
RET C ; Skipped = Absent
;
JR .loop
;-------;
;-------;
; CHECK WITH Identify Device.
; Exit: CF - No device
; NC and ZF - ATA
; NC and NZ - ATAPI
.IdentDevCheck: LD E,IDE.ATA.IdentifyDevice
LD BC,IDE.Write.Command
OUT (C),E
;
LD DE,IDE.ControlByte.Busy * 256 + 0
LD HL,PAUSES.WAIT.IDE
CALL BITS_WAITS.WAIT_PRT
RET C ; Absent
;
LD BC,IDE.Read.Status
IN A,(C)
RRCA
JR C,.non_ATA
;
AND (IDE.ControlByte.DataRequest + IDE.ControlByte.Ready) / 2
SCF
RET Z
;
XOR A
RET ; ATA
;
.non_ATA: LD BC,IDE.Read.Error
IN A,(C)
AND IDE.ErrorByte.Abort
RET NZ ; ATAPI
;
SCF ; Absent
RET
;-------;
;-------;
; ATAPI or Absent
; Exit: CF - No device
; NC - ATAPI
.IdentPDevChk: LD E,IDE.ATAPI.IdentifyPackedDevice
LD BC,IDE.Write.Command
OUT (C),E
LD HL,PAUSES.WAIT.IDE
LD DE,IDE.ControlByte.Busy*256 + 0
CALL BITS_WAITS.WAIT_PRT
RET C
;
LD BC,IDE.Read.Status
IN A,(C)
RRCA
RET C
XOR A
RET
;-------;
;-------;
; ¥á«¨ ª ­ « ¯ãá⮩, â® ç¨â ¥âáï ¨§ ¯®àâ  â®, çâ® ¡ë«® ¢ëáâ ¢«¥­®
; ¯®á«¥¤­¨¬ ­  設ã c çñâ­®£®  ¤à¥á  ¢ ¯ ¬ï⨠  íâ® ¯¥à¢ë© ¨«¨ ¢â®à®©
; ¡ ©â ª®¤  ª®¬ ­¤ë
ALIGN 2 ; âã⠭㦭® ¢ëà ¢­¨¢ ­¨¥ ¯® § ¤ã¬ ­­ë¬  ¤à¥á ¬ ¤«ï ª®¬ ­¤ ç⥭¨ï ¨§ ¯®à⮢
.CheckChanel: LD BC,IDE.Read.Status
IN A,(C) ;#ED78 A=#78
IN L,(C) ;#ED68 L=#68
LD D,A
IN A,(C) ;#ED60 A=#ED
LD E,L
; ¥á«¨ ¯ãá⮩: DE=#7868, A=#ED
;
LD HL,#7868 + #ED
AND A
SBC HL,DE
XOR L
RET NZ ; not absent
SCF
RET ; absent
;-------;
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
SetUP_CHANELS:
LD A,1
CALL .CMD
LD A,3
CALL .CMD
LD A,0
CALL .CMD
LD A,2
.CMD: CALL SELECT_IDE
LD BC,IDE.Write.Command
LD H,IDE.ATA.Nop
OUT (C),H
PAUSE_DJNZ 32
; Disable INTRQ
; LD BC,IDE.Write.DeviceControl
; LD A,%0000'0010
; OUT (C),A
; PAUSE_DJNZ 32
; ;
; CALL DisableStandBy
; PAUSE_DJNZ 32
RET
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
; DisableWriteCache:
; LD BC,IDE.Write.Features
; LD A,IDE.ATA.SetFeatures.DisableWriteCache
; OUT (C),A
; LD A,IDE.ATA.SetFeatures
; JP IDE_CMD
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
;Disable StandBy timer
; DisableStandBy:
; LD BC,IDE.Write.Counter
; XOR A
; OUT (C),A
; LD A,IDE.ATA.Idle
; JP IDE_CMD
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
; DISABLE_8bit:
; LD BC,IDE.Write.Features
; LD A,IDE.ATA.SetFeatures.Disable8bit
; OUT (C),A
; LD A,IDE.ATA.SetFeatures
; JP IDE_CMD
/////////////////////////////////////////////////////////////////////[^]
;!FIXIT CMOS ¯¥à¥¤¥« âì ¯®¤ ­ §¢ ­¨ï ï祥ª ¨§ SP2000.inc
PRIM_MASTER_CMOS_T:
DB M_CYLL,M_CYLH,M_HEAD,M_SECT
PRIM_SLAVE_CMOS_T:
DB S_CYLL,S_CYLH,S_HEAD,S_SECT
SEC_MASTER_CMOS_T:
DB SM_CYLL,SM_CYLH,SM_HEAD,SM_SECT
SEC_SLAVE_CMOS_T:
DB SS_CYLL,SS_CYLH,SS_HEAD,SS_SECT
SKIP: BYTE #FF
IDEDEV: BYTE #FF
ICHANEL: BYTE #00
MasterSlave BYTE #00
;WAITHDD DEC L
; RET NZ
; DEC H
; RET NZ
; DEC E
; RET NZ
; SCF
; RET
; E - Second * 10
;PAUSE LD HL,#0000
;PAUSE1 DEC L
; JR NZ,PAUSE1
; DEC H
; JR NZ,PAUSE1
; DEC E
; JR NZ,PAUSE1
; RET
ENDMODULE
;

View File

@ -0,0 +1,242 @@
; INCLUDE '../mem_map.inc'
; ORG Depacker_start
; DeHRUSTer v1.2
; HL - ­ ç «®  à娢 
; DE -  ¤à¥á à á¯ ª®¢ª¨
;--------------[DEPACKER]---------------
DEHRUST:
PUSH DE
PUSH HL
INC HL
INC HL
LD C,(HL)
INC HL
LD B,(HL)
INC HL
DEC BC
EX DE,HL
ADD HL,BC
EX DE,HL
LD C,(HL)
INC HL
LD B,(HL)
DEC BC
POP HL
ADD HL,BC
SBC HL,DE
ADD HL,DE
JR C,.LL4019
LD D,H
LD E,L
.LL4019:
LDDR
EX DE,HL
POP DE
LD C,#0C
ADD HL,BC
PUSH HL
POP IX
LD A,#03
.LL4025:
DEC HL
LD B,(HL)
DEC HL
LD C,(HL)
PUSH BC
DEC A
JR NZ,.LL4025
LD B,A
EXX
LD D,#BF
LD C,#10
CALL .LL4115
.LL4036:
LD A,(IX+#00)
INC IX
EXX
.LL403C:
LD (DE),A
INC DE
.LL403E:
EXX
.LL403F:
ADD HL,HL
DJNZ .LL4045
CALL .LL4115
.LL4045:
JR C,.LL4036
LD E,#01
.LL4049:
LD A,#80
.LL404B:
ADD HL,HL
DJNZ .LL4051
CALL .LL4115
.LL4051:
RLA
JR C,.LL404B
CP #03
JR C,.LL405D
ADD A,E
LD E,A
XOR C
JR NZ,.LL4049
.LL405D:
ADD A,E
CP #04
JR Z,.LL40C4
ADC A,#FF
CP #02
EXX
.LL4067:
LD C,A
.LL4068:
EXX
LD A,#BF
JR C,.LL4082
.LL406D:
ADD HL,HL
DJNZ .LL4073
CALL .LL4115
.LL4073:
RLA
JR C,.LL406D
JR Z,.LL407D
INC A
ADD A,D
JR NC,.LL4084
SUB D
.LL407D:
INC A
JR NZ,.LL408D
LD A,#EF
.LL4082:
RRCA
CP A
.LL4084:
ADD HL,HL
DJNZ .LL408A
CALL .LL4115
.LL408A:
RLA
JR C,.LL4084
.LL408D:
EXX
LD H,#FF
JR Z,.LL409B
LD H,A
INC A
LD A,(IX+#00)
INC IX
JR Z,.LL40A6
.LL409B:
LD L,A
ADD HL,DE
LDIR
.LL409F:
JR .LL403E
.LL40A1:
EXX
RRC D
JR .LL403F
.LL40A6:
CP #E0
JR C,.LL409B
RLCA
XOR C
INC A
JR Z,.LL40A1
SUB #10
.LL40B1:
LD L,A
LD C,A
LD H,#FF
ADD HL,DE
LDI
LD A,(IX+#00)
INC IX
LD (DE),A
INC HL
INC DE
LD A,(HL)
JP .LL403C
.LL40C4:
LD A,#80
.LL40C6:
ADD HL,HL
DJNZ .LL40CC
CALL .LL4115
.LL40CC:
ADC A,A
JR NZ,.LL40F3
JR C,.LL40C6
LD A,#FC
JR .LL40F6
.LL40D5:
LD B,A
LD C,(IX+#00)
INC IX
CCF
JR .LL4068
.LL40DE:
CP #0F
JR C,.LL40D5
JR NZ,.LL4067
LD B,#03
EX DE,HL
.LL40E7:
POP DE
LD (HL),E
INC HL
LD (HL),D
INC HL
DJNZ .LL40E7
LD HL,#2758
EXX
RET
.LL40F3:
SBC A,A
LD A,#EF
.LL40F6:
ADD HL,HL
DJNZ .LL40FC
CALL .LL4115
.LL40FC:
RLA
JR C,.LL40F6
EXX
JR NZ,.LL40B1
BIT 7,A
JR Z,.LL40DE
SUB #EA
ADD A,A
LD B,A
.LL410A:
LD A,(IX+#00)
INC IX
LD (DE),A
INC DE
DJNZ .LL410A
JR .LL409F
.LL4115:
LD B,C
LD L,(IX+#00)
INC IX
LD H,(IX+#00)
INC IX
RET
Length EQU $-DEHRUST
in a,(#FF)
;---------------------------------------
;---------------[MAIN.HR]---------------
;Depacker.packcode EQU $$$
;PackedMAIN EQU $
; INCBIN 'Build/Bin/temp/MAIN.HR'
;---------------------------------------
;

View File

@ -0,0 +1,48 @@
;
; before_intPointer EQU #C000
; INT_POINTER EQU #C002
; INT_HANDLER EQU #C004
before_intPointer EQU $
BLOCK #FF - low $,0 ; ¢ëà ¢­¨¢ ­¨¥ ­  #xxFF
INT_POINTER: WORD 0
ASSERT +low INT_POINTER = #FF, 'ERROR! Not valid interrupt pointer!'
IFDEF PREBUILD
ASSERT INT_POINTER-before_intPointer < 16, 'Warning! To much space before INT_POINTER.'
ELSE
IF INT_POINTER-before_intPointer > 16
DISPLAY 'Warning! To much space before INT_POINTER: ',/D,INT_POINTER-before_intPointer
ENDIF
ENDIF
INT_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
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
;

View File

@ -0,0 +1,794 @@
;
_mInfoALIGN 256,0 ; ¢ëà ¢­¨¢ ­¨¥ ­   ¤à¥á #XX00
SBUF: BLOCK 64,0
HEAD: DB 0
HOST: DB 0
;
K_LOCK EQU $-KEYFLAG
LANG_L EQU 7
PAUSE_L EQU 6
RES5_L EQU 5
RES4_L EQU 4
NUM_L EQU 3
SCRL_L EQU 2
INS_L EQU 1
CAPS_L EQU 0
KEYFLAG: DB 2 ;D0-Key Pressed
;
K_SHIFT EQU $-KEYFLAG
L_SHIFT EQU 7
R_SHIFT EQU 6
X_CTRL EQU 5
X_ALT EQU 4
L_CTRL EQU 3
L_ALT EQU 2
R_CTRL EQU 1
R_ALT EQU 0
KEYCTRL: DB 0
;
KEYFLG EQU $-KEYFLAG
FLAG_E0 EQU 7
FLAG_F0 EQU 6
FLAG_E1 EQU 5
FLAG_04 EQU 4
FLAG_03 EQU 3
FLAG_02 EQU 2
FLAG_01 EQU 1
FLAG_00 EQU 0
DB 0
;
SOUND_K EQU $-KEYFLAG
FLAG_S7 EQU 7
FLAG_S6 EQU 6
FLAG_S5 EQU 5
FLAG_S4 EQU 4
FLAG_S3 EQU 3
FLAG_S2 EQU 2
SF_ALT EQU 1
SF_BUFF EQU 0
DB 3
;
;UNCODE: DW 0000
;
; D15 - LShift
; D14 - RShift
; D13 - CTRL
; D12 - ALT
; D11 - LCTRL
; D10 - LALT
; D9 - RCTRL
; D8 - RALT
; D7 - Language Lock
; D6 - Reserved
; D5 - Reserved
; D4 - Reserved
; D3 - Num Lock
; D2 - Scroll Lock
; D1 - Insert Lock
; D0 - Caps Lock
; D15 - Keystroke
; D14
; D13 \
; D12 \
; D11 -- Position code (0...5Ah)
; D10 /
; D9 /
; D8
; D7..D0 - ASCII code
WAITKEY:
LD HL,HOST
LD A,(HEAD)
CP (HL)
JR Z,WAITKEY
CALL GETSYM
LD A,E
AND A
RET
SCANKEY:
LD HL,HOST
LD A,(HEAD)
CP (HL)
RET Z
CALL GETSYM
LD A,E
RET
CTRLKEY:
LD HL,HOST
LD A,(HEAD)
CP (HL)
LD BC,(KEYFLAG)
LD A,#00
RET Z
DEC A
RET
PUTSYM: LD HL,HEAD
LD A,(HOST)
SUB 4
AND #3F
CP (HL)
JR Z,FULL_BF
LD A,(HL)
INC (HL)
INC (HL)
INC (HL)
INC (HL)
RES 6,(HL)
LD L,A
LD H,high SBUF
LD (HL),E
INC L
LD (HL),D
INC L
LD (HL),B
INC L
LD (HL),C
RET
GETSYM: LD HL,HOST
LD A,(HEAD)
CP (HL)
RET Z
LD A,(HL)
INC (HL)
INC (HL)
INC (HL)
INC (HL)
RES 6,(HL)
LD L,A
LD H,high SBUF
LD E,(HL)
INC L
LD D,(HL)
INC L
LD B,(HL)
INC L
LD C,(HL)
RET
FULL_BF:
EX AF,AF'
BIT SF_BUFF,(IX+SOUND_K)
JR Z,.FBF
EXX
LD DE,230
LD HL,50
CALL BEEP
EXX
.FBF: EX AF,AF'
RET
KEYSCAN:
LD IX,KEYFLAG
RESCANN:
IN A,(Z84.SIO.Ch_A.Ctrl)
AND 1
RET Z
;[x] 18/02/2024 ¯à®¢¥àª  ­  ¯¥à¥¯®«­¥­¨¥ ¡ãä¥à 
; A = 1
; reg 1
OUT (Z84.SIO.Ch_A.Ctrl),A
IN A,(Z84.SIO.Ch_A.Ctrl)
AND %0010'0000 ; check receiver overrun error
JP NZ,Receiver_Overrun
;
IN A,(Z84.SIO.Ch_A.Data)
CP #F0
JR Z,F0_KEY
CP #E0
JR Z,E0_KEY
;
CP #E1
IF USE_E1_SCANCODE
JR Z,E1_KEY
ELSE
JR Z,RESCANN
ENDIF
;
BIT FLAG_F0,(IX+KEYFLG)
JR NZ,UN_KEY
;
LD L,A
CALL XLAT
CALL SHIFTS
RES FLAG_E0,(IX+KEYFLG)
IF USE_E1_SCANCODE
RES FLAG_E1,(IX+KEYFLG)
ENDIF
;
;[x] 29/02/2024 ¢ë£à¥¡á⨠¢¥áì ¡ãä¥à
JR Z,RESCANN ;IT'S SHIFT KEY
; RET Z ;IT'S SHIFT KEY
;
CALL INPCODE ;L - AT POS. CODE
;PUTCODE
LD HL,#1C00 ;Caps Lock
AND A
SBC HL,DE
CALL Z,CAPS_X
; !TODO ¢¥à­ãâì àãá᪨©? € § ç¥¬?
; LD HL,#B800 ;Ctrl + Space
; AND A
; SBC HL,DE
; CALL Z,RUS_X
LD HL,#5000 ;Insert
AND A
SBC HL,DE
CALL Z,INS_X
LD HL,#4900 ;Num Lock
AND A
SBC HL,DE
CALL Z,NUM_X
LD HL,#C900 ;Pause Lock
AND A
SBC HL,DE
CALL Z,PAUSE_X
LD HL,#4800 ;Scroll Lock
AND A
SBC HL,DE
CALL Z,SCL_X
;-----------------------; !!!!! à¥á¥â ¯® Š€„
; LD HL,#CF00 ; ; Ctrl + Alt + Del
; AND A ;
; SBC HL,DE ;
; CALL Z,RST_X ;
;-----------------------;
LD BC,(KEYFLAG)
CALL PUTSYM
JP RESCANN
E0_KEY: SET FLAG_E0,(IX+KEYFLG)
JR RESCANN
F0_KEY: SET FLAG_F0,(IX+KEYFLG)
JR RESCANN
IF USE_E1_SCANCODE
E1_KEY: SET FLAG_E1,(IX+KEYFLG)
JR RESCANN
ENDIF
UN_KEY: RES FLAG_F0,(IX+KEYFLG)
LD L,A
CALL XLAT
CALL UNSHIFT
RES FLAG_E0,(IX+KEYFLG)
;LD H,0
;LD (UNCODE),HL
RET
CAPS_X: LD A,(KEYFLAG)
XOR 1<<CAPS_L
LD (KEYFLAG),A
RET
INS_X: LD A,(KEYFLAG)
XOR 1<<INS_L
LD (KEYFLAG),A
RET
NUM_X: LD A,(KEYFLAG)
XOR 1<<NUM_L
LD (KEYFLAG),A
RET
PAUSE_X:
BIT X_CTRL,(IX+K_SHIFT)
RET Z
POP HL
LD A,(KEYFLAG)
XOR 1<<PAUSE_L
LD (KEYFLAG),A
AND 1<<PAUSE_L
RET Z
EI
.loop: HALT
BIT PAUSE_L,(IX+K_LOCK)
JR NZ,.loop
DI
RET
SCL_X: LD A,(KEYFLAG)
XOR 1<<SCRL_L
LD (KEYFLAG),A
RET
;///////////////////////////////////////////////////////////////////////
;///////////////////////////////////////////////////////////////////////
; !TODO £«ï­ãâì, ¬®¦¥â ¯à¨£®¤¨âáï
;ECHOKEY: CALL SCANKEY
; JR Z,ECHOKEY
; PUSH DE
; PUSH BC
; CALL PUTCHAR
; POP BC
; POP DE
; LD A,E
; AND A
; RET
; !TODO £«ï­ãâì, ¬®¦¥â ¯à¨£®¤¨âáï
; TESTKEY:
; LD HL,HOST
; LD A,(HEAD)
; CP (HL)
; RET Z
; LD L,(HL)
; LD H,high SBUF
; LD E,(HL)
; INC L
; LD D,(HL)
; INC L
; LD B,(HL)
; INC L
; LD C,(HL)
; LD A,E
; RET
; !TODO £«ï­ãâì, ¬®¦¥â ¯à¨£®¤¨âáï
; K_CLEAR:
; LD A,(HOST)
; LD (HEAD),A
; LD A,#2F
; CP B
; JR C,.K_C2
; LD A,1
; SCF
; RET
; .K_C2: LD A,#35
; CP B
; JR NC,.K_C3
; LD A,1
; SCF
; RET
; .K_C3: LD C,B
; RST #10
; RET
; !TODO ¢¥à­ãâì àãá᪨©? € § ç¥¬?
;RUS_X BIT X_CTRL,(IX+K_SHIFT)
; RET Z
; LD A,(IX+K_LOCK)
; XOR #80
; LD (IX+K_LOCK),A
; BIT SF_ALT,(IX+SOUND_K)
; RET Z
; EXX
; LD DE,190
; LD HL,20
; CALL BEEP
; EXX
; RET
;---------------------------- ;!!!!! à¥á¥â ¯® Š€„
; RST_X:
; BIT X_CTRL,(IX+K_SHIFT)
; RET Z
; BIT X_ALT,(IX+K_SHIFT)
; RET Z
; XOR A
; LD BC,#02FD
; RST_to_BIOS
; RET
;----------------------------
;///////////////////////////////////////////////////////////////////////
;///////////////////////////////////////////////////////////////////////
;
;;
UNSHIFT:
LD A,L
CP #37 ;L ALT
JR Z,.L_ALT
CP #39 ;R ALT
JR Z,.R_ALT
CP #36 ;L CTRL
JR Z,.L_CTRL
CP #3A ;R CTRL
JR Z,.R_CTRL
CP #29 ;L SHIFT
JR Z,.L_SHIFT
CP #34 ;R SHIFT
RET NZ
;.R_SHIFT:
RES R_SHIFT,(IX+K_SHIFT)
RET
.L_ALT:
RES L_ALT,(IX+K_SHIFT)
BIT R_ALT,(IX+K_SHIFT)
RET NZ
RES X_ALT,(IX+K_SHIFT)
RET
.R_ALT:
RES R_ALT,(IX+K_SHIFT)
BIT L_ALT,(IX+K_SHIFT)
RET NZ
RES X_ALT,(IX+K_SHIFT)
RET
.L_CTRL:
RES L_CTRL,(IX+K_SHIFT)
BIT R_CTRL,(IX+K_SHIFT)
RET NZ
RES X_CTRL,(IX+K_SHIFT)
RET
.R_CTRL:
RES R_CTRL,(IX+K_SHIFT)
BIT L_CTRL,(IX+K_SHIFT)
RET NZ
RES X_CTRL,(IX+K_SHIFT)
RET
.L_SHIFT:
RES L_SHIFT,(IX+K_SHIFT)
RET
;;
SHIFTS:
LD A,L
CP #37 ;L ALT
JR Z,.L_ALT
CP #39 ;R ALT
JR Z,.R_ALT
CP #36 ;L CTRL
JR Z,.L_CTRL
CP #3A ;R CTRL
JR Z,.R_CTRL
CP #29 ;L SHIFT
JR Z,.L_SHIFT
CP #34 ;R SHIFT
RET NZ
;R SHIFT:
SET R_SHIFT,(IX+K_SHIFT)
RET
.L_ALT:
SET L_ALT,(IX+K_SHIFT)
SET X_ALT,(IX+K_SHIFT)
RET
.R_ALT:
SET R_ALT,(IX+K_SHIFT)
SET X_ALT,(IX+K_SHIFT)
RET
.L_CTRL:
SET L_CTRL,(IX+K_SHIFT)
SET X_CTRL,(IX+K_SHIFT)
RET
.R_CTRL:
SET R_CTRL,(IX+K_SHIFT)
SET X_CTRL,(IX+K_SHIFT)
RET
.L_SHIFT:
SET L_SHIFT,(IX+K_SHIFT)
RET
;;
;
;Standart ASCII tables
NORMTAB:
DB "`",Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
DB Tab,"q","w","e","r","t","y","u","i","o","p","[","]"
DB Cps,"a","s","d","f","g","h","j","k","l",";","'",Ent
DB #00,"z","x","c","v","b","n","m",#2C,".","/",#00,#5C ;"\"
DB #00,#00,Spc,#00,#00
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
DB #00,#00,#00,"/","*","-","+",Ent,#00
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
SHIFTAB:
DB "~",Esc,"!","@","#","$","%","^","&","*","(",")","_","+",Bcs
DB Tab,"Q","W","E","R","T","Y","U","I","O","P","{","}"
DB Cps,"A","S","D","F","G","H","J","K","L",":",#22,Ent
DB #00,"Z","X","C","V","B","N","M","<",">","?",#00,"|"
DB #00,#00,Spc,#00,#00
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
DB #00,#00,#00,"/","*","-","+",Ent,#00
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
CAPSTAB:
DB "`",Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
DB Tab,"Q","W","E","R","T","Y","U","I","O","P","[","]"
DB Cps,"A","S","D","F","G","H","J","K","L",";","'",Ent
DB #00,"Z","X","C","V","B","N","M",#2C,".","/",#00,#5C ;"\"
DB #00,#00,Spc,#00,#00
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
DB #00,#00,#00,"/","*","-","+",Ent,#00
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
SHF2TAB:
DB "~",Esc,"!","@","#","$","%","^","&","*","(",")","_","+",Bcs
DB Tab,"q","w","e","r","t","y","u","i","o","p","{","}"
DB Cps,"a","s","d","f","g","h","j","k","l",":",#22,Ent
DB #00,"z","x","c","v","b","n","m","<",">","?",#00,"|"
DB #00,#00,Spc,#00,#00
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
DB #00,#00,#00,"/","*","-","+",Ent,#00
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
///////////////////////////////////////////////////////////////////////
; _mInfoALIGN 256,0 ; ¡¥§ ¢ëà ¢­¨¢ ­¨ï
XLAT_T:
; 0 1 2 3 4 5 6 7 8 9 A B C D E F
DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00
DB #00,#37,#29,#00,#36,#10,#02,#00,#00,#00,#2A,#1E,#1D,#11,#03,#00 ;10
DB #00,#2C,#2B,#1F,#12,#05,#04,#00,#00,#38,#2D,#20,#14,#13,#06,#00 ;20
DB #00,#2F,#2E,#22,#21,#15,#07,#00,#00,#00,#30,#23,#16,#08,#09,#00 ;30
DB #00,#31,#24,#17,#18,#0B,#0A,#00,#00,#32,#33,#25,#26,#19,#0C,#00 ;40
DB #00,#00,#27,#00,#1A,#0D,#00,#00,#1C,#34,#28,#1B,#00,#35,#00,#00 ;50
DB #00,#00,#00,#00,#00,#00,#0E,#00,#00,#51,#00,#54,#57,#00,#00,#00 ;60
DB #50,#4F,#52,#55,#56,#58,#01,#49,#45,#4D,#53,#4C,#4B,#59,#48,#00 ;70
DB #00,#00,#00,#41,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 ;80
XLAT_T.Size EQU $-XLAT_T
///////////////////////////////////////////////////////////////////////
XLAT: BIT FLAG_E0,(IX+KEYFLG)
JR Z,.W_O_E0
CP #11 ; Right ALT
LD L,#39
RET Z
CP #14 ; Right CTRL
LD L,#3A
RET Z
CP #5A ; enter
LD L,#4E
RET Z
CP #4A ; /
LD L,#4A
RET Z
CP #7C ; * - Print Screen
LD L,#47
RET Z
LD L,A
.W_O_E0:
; â ¡«¨æ  á ¢ëà ¢­¨¢ ­¨¥¬ ­  256
; LD H,high XLAT_T
; LD L,(HL)
;
; ¡¥§ ¢ëà ¢­¨¢ ­¨ï
; [x] 31/03/2024 ¨á¯à ¢«¥­ ¡ £ á ¢ë室®¬ §  £à ­¨æë â ¡«¨æë XLAT_T
CP XLAT_T.Size
LD L,0
RET NC
;
LD HL,XLAT_T
ADD A,L
LD L,A
JR NC,.no_inc
INC H
.no_inc:
LD L,(HL)
RET
RET
; !TODO ¯®á¬®âà¥âì
;INPCODE:
; BIT 1,(IX+1) ;00110000
; JR NZ,FN_KEY ;LRCAcaRP
INPCODE: LD D,L
LD E,0
; !TODO ¢¥à­ãâì àãá᪨©? € § ç¥¬?
; BIT LANG_L,(IX+K_LOCK)
; JP NZ,RUSCODE
LD A,(KEYCTRL)
AND 1<<L_SHIFT | 1<<R_SHIFT
JR NZ,.SHIFT
SET 7,D
BIT X_ALT,(IX+K_SHIFT)
RET NZ
BIT X_CTRL,(IX+K_SHIFT)
RET NZ
LD D,L
BIT CAPS_L,(IX+K_LOCK)
LD BC,CAPSTAB
JR NZ,CONVERT.NO_SET
LD BC,NORMTAB
JR CONVERT.NO_SET
;
.SHIFT: LD BC,SHIFTAB
BIT CAPS_L,(IX+K_LOCK)
JR Z,CONVERT.SET
LD BC,SHF2TAB
CONVERT: ;
.SET: SET 7,D
.NO_SET: LD H,0
ADD HL,BC
LD E,(HL)
RET
; !TODO ¢¥à­ãâì àãá᪨©? € § ç¥¬?
;RUSCODE LD A,(IX+K_SHIFT)
; AND #C0
; JR NZ,SHIFT_R
; SET 7,D
; BIT X_ALT,(IX+K_SHIFT)
; RET NZ
; BIT X_CTRL,(IX+K_SHIFT)
; RET NZ
; LD D,L
; BIT CAPS_L,(IX+K_LOCK)
; LD BC,CAPSRUS
; JR NZ,CONVER2
; LD BC,NORMRUS
;CONVER2 LD H,0
; ADD HL,BC
; LD E,(HL)
; RET
;
;SHIFT_R LD BC,SHIFRUS
; BIT CAPS_L,(IX+K_LOCK)
; JR Z,CONVER4
; LD BC,SHF2RUS
;CONVER4 LD H,0
; ADD HL,BC
; LD E,(HL)
; SET 7,D
; RET
;K_SETUP INC B
; DEC B
; JP Z,KEYMAP
; DEC B
; JP Z,K_SND_R
; DEC B
; JP Z,K_SND_W
; LD A,#0E
; SCF
; RET
;
;K_SND_R LD A,(SOUND_K)
; AND A
; RET
;
;K_SND_W LD (SOUND_K),A
; AND A
; RET
; `
; 0
; Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Back
; 1 2 3 4 5 6 7 8 9 A B C D E
; Tab,"Q","W","E","R","T","Y","U","I","O","P","[","]"
; F 10 11 12 13 14 15 16 17 18 19 1A 1B
; Cps,"A","S","D","F","G","H","J","K","L",";","'",Enter
; 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28
; LSh,"Z","X","C","V","B","N","M",",",".","/",RSh,"\"
; 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35
; LCl,LAt,SPC,Rat,RCl,F01,F02,F03,F04,F05,F06,F07,F08
; 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42
; F09,F10,F11,F12,prn,scr,num,"/","*","-","+",ent,Del
; 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
; Ins,End,Dwn,PgD,Lft,"5",Rgh,Hom,Upp,PgU
; 50 51 52 53 54 55 56 57 58 59
;
;================================
Esc EQU #1B
Bcs EQU #08
Tab EQU #09
Cps EQU #00
Spc EQU #20
Ent EQU #0D
; !TODO ¢¥à­ãâì àãá᪨©? € § ç¥¬?
;Standart Russian tables
;NORMRUS DB #F1,Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
; DB Tab,#A9,#E6,#E3,#AA,#A5,#AD,#A3,#E8,#E9,#A7,#E5,#EA
; DB Cps,#E4,#EB,#A2,#A0,#AF,#E0,#AE,#AB,#A4,#A6,#ED,Ent
; DB #00,#EF,#E7,#E1,#AC,#A8,#E2,#EC,#A1,#EE,".",#00,"\"
; DB #00,#00,Spc,#00,#00
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
; DB #00,#00,#00,"/","*","-","+",Ent,#00
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
;
;SHIFRUS DB #F0,Esc,"!",#22,"#","$",":",#2C,".",";","?","%","_","+",Bcs
; DB Tab,#89,#96,#93,#8A,#85,#8D,#83,#98,#99,#87,#95,#9A
; DB Cps,#94,#9B,#82,#80,#8F,#90,#8E,#8B,#84,#86,#9D,Ent
; DB #00,#9F,#97,#91,#8C,#88,#92,#9C,#81,#9E,#2C,#00,"|"
; DB #00,#00,Spc,#00,#00
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
; DB #00,#00,#00,"/","*","-","+",Ent,#00
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
;
;CAPSRUS DB #F0,Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
; DB Tab,#89,#96,#93,#8A,#85,#8D,#83,#98,#99,#87,#95,#9A
; DB Cps,#94,#9B,#82,#80,#8F,#90,#8E,#8B,#84,#86,#9D,Ent
; DB #00,#9F,#97,#91,#8C,#88,#92,#9C,#81,#9E,".",#00,"\"
; DB #00,#00,Spc,#00,#00
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
; DB #00,#00,#00,"/","*","-","+",Ent,#00
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
;
;SHF2RUS DB #F1,Esc,"!",#22,"#","$",":",#2C,".",";","?","%","_","+",Bcs
; DB Tab,#A9,#E6,#E3,#AA,#A5,#AD,#A3,#E8,#E9,#A7,#E5,#EA
; DB Cps,#E4,#EB,#A2,#A0,#AF,#E0,#AE,#AB,#A4,#A6,#ED,Ent
; DB #00,#EF,#E7,#E1,#AC,#A8,#E2,#EC,#A1,#EE,#2C,#00,"|"
; DB #00,#00,Spc,#00,#00
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
; DB #00,#00,#00,"/","*","-","+",Ent,#00
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
;
;================================
BEEP: LD A,#10
OUT (ZX_Beeper),A
LD B,D
LD C,E
.loop1: DEC BC
LD A,B
OR C
JR NZ,.loop1
XOR A ;LD A,#00
OUT (ZX_Beeper),A
LD B,D
LD C,E
.loop2: DEC BC
LD A,B
OR C
JR NZ,.loop2
DEC HL
LD A,H
OR L
JR NZ,BEEP
RET
;COM_A EQU #19 Z84.SIO.Ch_A.Ctrl
;DAT_A EQU #18 Z84.SIO.Ch_A.Data
;------------------------------;????? à §®¡à âìáï
; !TODO £«ï­ãâì, ¬®¦¥â ¯à¨£®¤¨âáï
; KINIT: LD A,0
; OUT (Z84.SIO.Ch_A.Ctrl),A
; LD A,1
; OUT (Z84.SIO.Ch_A.Ctrl),A
; LD A,#00 ;#18
; OUT (Z84.SIO.Ch_A.Ctrl),A
; LD A,3
; OUT (Z84.SIO.Ch_A.Ctrl),A
; LD A,#C1
; OUT (Z84.SIO.Ch_A.Ctrl),A
; LD A,4
; OUT (Z84.SIO.Ch_A.Ctrl),A
; LD A,#07 ;#05
; OUT (Z84.SIO.Ch_A.Ctrl),A
; LD A,5
; OUT (Z84.SIO.Ch_A.Ctrl),A
; LD A,#62
; OUT (Z84.SIO.Ch_A.Ctrl),A
; RET
;------------------------------;????? à §®¡à âìáï
; [x] 18/02/2024 ¯à®¢¥àª  ­  ¯¥à¥¯®«­¥­¨¥ ¡ãä¥à 
Receiver_Overrun:
; empty the buffer
IN A,(Z84.SIO.Ch_A.Data)
IN A,(Z84.SIO.Ch_A.Ctrl)
RRCA
JR C,Receiver_Overrun
; reg 0 - reset errors
LD A,%0011'0000
OUT (Z84.SIO.Ch_A.Ctrl),A
;!TODO ¯à¨ ¤¥â¥ªâ¥ ¯¥à¥¯®«­¥­¨ï ¡ãä¥à  ¯à®æ  á­ïâì ª« ¢¨è¨ ¨§ ¯®àâ  #FE ᯥªâà㬠
;
LD (IX+K_SHIFT),0
LD (IX+KEYFLG),0
;
; LD A,(HOST)
; LD (HEAD),A
;
AND A
RET
;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,548 @@
def_pal_mask EQU #FF
PIC_SET_PAL_FF EQU def_pal_mask*256+BIOS.PIC_SET_PAL
;;
ScreenPOS:
.SUBNAME:
CALL LP_GET_PLACE
LD E,.SUBNAME.POS ;!HARDCODE autodetected hdd/cdrom info
JP LP_SET_PLACE
.SUBNAME.POS EQU 37
;
.CRLF: CALL LP_GET_PLACE
INC D
LD E,#00
JP LP_SET_PLACE
;;
;!TODO ¯¥à¥¤¥« âì,   â® ªà¨¢® ª ª-â®
DWPRINT:
LD A,(HL)
CP ' '
JR NZ,PRINTDW
INC HL
LD A,(HL)
DEC HL
CP ' '
JR NZ,PRINTDW
INC HL
INC HL
DJNZ DWPRINT
RET
;!TODO ¯¥à¥¤¥« âì,   â® ªà¨¢® ª ª-â®
PRINTDW:
PUSH BC
LD E,(HL)
INC HL
LD A,(HL)
INC HL
CALL PRINT_CHAR
LD A,E
CALL PRINT_CHAR
POP BC
DJNZ PRINTDW
RET
PRINTA: LD E,A
JP LP_PRINT_ATR
PRINT_CHAR:
LD B,1
JP LP_PRINT_SYM
;
TPRINTZ: CALL LP_SET_PLACE
PRINTZ: LD B,0
LD D,B
JP LP_PRINT_LINE6
HPRINTZ: LD B,0
LD D,B
LD E,COLORS.CGA.INC.WHITE
JP LP_PRINT_LINE5
CPRINTZ: LD B,0
LD D,B
LD E,A
JP LP_PRINT_LINE5
;HL - NUMBER
IZPRINT: LD D,1
JR IPRIN
IPRINT:
LD D,0
IPRIN: LD BC,10000
CALL PRINTDG
LD BC,1000
CALL PRINTDG
LD BC,100
CALL PRINTDG
LD BC,10
CALL PRINTDG
LD A,L
ADD A,#30
JP PRINT_CHAR
PRINTDG:
LD A,#2F
PDG1: INC A
SBC HL,BC
JR NC,PDG1
ADD HL,BC
BIT 0,D
JR NZ,PDG2
CP #30
RET Z
SET 0,D
PDG2: PUSH BC
CALL PRINT_CHAR
POP BC
RET
; D - Y
; E - X
; H - CY
TLINEV:
;CALL ScreenPOS.LOCAT
CALL LP_SET_PLACE
LD A,(ElementsBuffer.UpCenter)
CALL PRSYM
DEC H
DEC H
.loop: INC D
;CALL ScreenPOS.LOCAT
CALL LP_SET_PLACE
LD A,(ElementsBuffer.VerticalLine)
CALL PRSYM
DEC H
JR NZ,.loop
INC D
;CALL ScreenPOS.LOCAT
CALL LP_SET_PLACE
LD A,(ElementsBuffer.DownCenter)
JP PRSYM
; D - Y
; E - X
; L - CX
TLINEH:
;CALL ScreenPOS.LOCAT
CALL LP_SET_PLACE
LD A,(ElementsBuffer.LeftCenter)
CALL PRSYM
DEC L
DEC L
LD A,(ElementsBuffer.HorizontalLine)
LD B,L
;CALL PRSYMB
CALL LP_PRINT_SYM
LD A,(ElementsBuffer.RightCenter)
JP PRSYM
; D - Y
; E - X
; B - CY
; C - CX
PBORDER: PUSH BC
LD A,C
DEC A
LD (.BSHI),A
DEC A
LD (.BHOR),A
LD (.BHOR2),A
CALL LP_SET_PLACE
LD A,(ElementsBuffer.UpLeft)
LD H,E
CALL PRSYM
LD A,(ElementsBuffer.HorizontalLine)
.BHOR+1: LD B,1
CALL LP_PRINT_SYM
LD A,(ElementsBuffer.UpRight)
CALL PRSYM
POP BC
DEC B
DEC B
INC D
LD E,H
.loop: PUSH BC
CALL LP_SET_PLACE
LD A,(ElementsBuffer.VerticalLine)
CALL PRSYM
LD A,H
.BSHI+1: ADD A,#00
LD E,A
CALL LP_SET_PLACE
LD A,(ElementsBuffer.VerticalLine)
CALL PRSYM
POP BC
LD E,H
INC D
DJNZ .loop
CALL LP_SET_PLACE
LD A,(ElementsBuffer.DownLeft)
CALL PRSYM
LD A,(ElementsBuffer.HorizontalLine)
.BHOR2+1: LD B,1
CALL LP_PRINT_SYM
LD A,(ElementsBuffer.DownRight)
CALL PRSYM
RET
PRSYM: LD B,1
JP LP_PRINT_SYM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
//////////////////// LOGO \\\\\\\\\\\\\\\\\\\\
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LOGOTYPE: CALL SHOW_LOGO
LD BC,CMOS_CELL.BootUpParams.Mask.StartDelay
CALL G_VALUE
OR A
JR Z,.EASYDLY ; Delay average
DEC A
JR Z,.SKIPDLY ; Delay disabled
; Delay enabled
LD B,LOGO_DELAY_NORM
.loop EI
push bc
HALT
CALL go_setup
pop bc
DJNZ .loop
; Delay average
.SKIPDLY: LD B,LOGO_DELAY_MAX
.MMA: PUSH BC
EI
HALT
DI
CALL FADE
POP BC
DJNZ .MMA
; ;
.ERASE_LOGO: LD IX,win_descriptor.tab80x32
LD HL,#0000
LD E,1
;
EI
HALT
DI
CALL WIN_OPEN
;
LD DE,0
LD HL,#0920 ;!HARDCODE LOGOTYPE SIZE
LD B,7
JP LP_CLS_WIN
; Delay disabled
.EASYDLY: LD B,LOGO_DELAY_MIN
.loop2: EI
HALT
DJNZ .loop2
DI
JR .ERASE_LOGO
; ; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SHOW_LOGO: LD IX,win_descriptor.tab320x256
LD HL,#0000
LD E,1
CALL WIN_OPEN
SAFE_PORTY
DI
LD A,1
OUT (SYS_PORT.ON),A
OUT (ROM.SLOT0),A
LD HL,MAIN_LOGO.Pallete
LD DE,memBUFFER.Shared
LD BC,MAIN_LOGO.Pallete.length
LDIR
XOR A
OUT (ROM.SLOT0),A
OUT (SYS_PORT.ON),A
EI
LD HL,memBUFFER.Shared
; A = 0
LD D,A ; SET DESKTOP PALETTE & CURSOR COLORS
LD E,A
LD B,def_pal_mask
CALL PIC_SET_PAL
SAFE_PORTY
DI
LD A,1
OUT (SYS_PORT.ON),A
;LD A,1
OUT (ROM.SLOT0),A
LD HL,MAIN_LOGO.Raster ; ­ ç «® ª à⨭ª¨ ¢ ¡ ­ª¥ <20>‡“
; CALL DECODE
CALL LOGO_TO_SCREEN
;
;--------------[<5B> áå «ª ]--------------[]
IF Pashalki
_PASHALKI_CODE
ENDIF
;--------------------------------------[]
;
XOR A
OUT (SYS_PORT.ON),A
OUT (ROM.SLOT0),A
EI
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
win_descriptor:
.tab80x32 Window_UserVars{
40, ; £®à¨§®­â «ì­ë© à §¬¥à ®ª­  ¢ §­ ª®¬¥áâ å
32, ; ¢¥à⨪ «ì­ë© à §¬¥à ¢ §­ ª®¬¥áâ å
0, ; ¯®«®¦¥­¨¥ ®ª­  ¯® £®à¨§®­â «¨ ­  íªà ­¥
0, ; ¯®«®¦¥­¨¥ ®ª­  ¯® ¢¥à⨪ «¨ ­  íªà ­¥
%0001'1011, ; ०¨¬ §­ ª®¬¥áâ 
0, ; ¤®¯®«­¨â¥«ì­ë© ०¨¬ §­ ª®¬¥áâ 
0, ; ¯®«®¦¥­¨¥ ¯® X ¢ ¯®«¥ £à ä¨ª¨ (¯® §­ ª®¬¥áâ ¬)
0 ; ¯®«®¦¥­¨¥ ¯® Y ¢ ¯®«¥ £à ä¨ª¨ (¯® §­ ª®¬¥áâ ¬)
}
.tab320x256 Window_UserVars{
16, ; £®à¨§®­â «ì­ë© à §¬¥à ®ª­  ¢ §­ ª®¬¥áâ å
9, ; ¢¥à⨪ «ì­ë© à §¬¥à ¢ §­ ª®¬¥áâ å
0, ; ¯®«®¦¥­¨¥ ®ª­  ¯® £®à¨§®­â «¨ ­  íªà ­¥
0, ; ¯®«®¦¥­¨¥ ®ª­  ¯® ¢¥à⨪ «¨ ­  íªà ­¥
%0010'0000, ; ०¨¬ §­ ª®¬¥áâ 
0, ; ¤®¯®«­¨â¥«ì­ë© ०¨¬ §­ ª®¬¥áâ 
8, ; ¯®«®¦¥­¨¥ ¯® X ¢ ¯®«¥ £à ä¨ª¨ (¯® §­ ª®¬¥áâ ¬)
0 ; ¯®«®¦¥­¨¥ ¯® Y ¢ ¯®«¥ £à ä¨ª¨ (¯® §­ ª®¬¥áâ ¬)
}
;
MACRO _mFADE
LD HL,memBUFFER.Shared
; A = 0
LD B,A
.loop: DUP 3
CP (HL)
JR Z,1F
DEC (HL)
1: INC HL
EDUP
INC HL
DJNZ .loop
ENDM
FADE: XOR A
_mFADE
_mFADE
; A = 0
LD HL,memBUFFER.Shared
; LD DE,#0000
LD D,A
LD E,A
;
LD B,def_pal_mask
CALL PIC_SET_PAL
SAFE_PORTY
go_setup: ; !FIXIT ¯¥à¥¤¥« âì ­  TSETUP
CALL SCANKEY
RET Z
CP #1B
JP Z,.to_EXIT_SETUP
LD HL,#4F00
AND A
SBC HL,DE
jr nz,go_setup
LD IX,win_descriptor.tab80x32
LD HL,#0000
LD E,1
CALL WIN_OPEN
JP ENTER_SETUP
.to_EXIT_SETUP:
LD HL,(RET_TO_EXP_ADDR)
PUSH HL
JP EXIT_SETUP
;DECODE:
LOGO_TO_SCREEN:
PUSH HL
IN A,(SLOT1)
LD H,A
IN A,(PORT_Y)
LD L,A
EX (SP),HL
LD A,#50
OUT (SLOT1),A
LD A,72 ; !HARDCODE ª®®à¤¨­ â  ª à⨭ª¨ ¯® Y + ¢ëá®â  ª à⨭ª¨
.loop:
DEC A
OUT (PORT_Y),A
LD DE,#4040 ; !HARDCODE ª®®à¤¨­ â  ª à⨭ª¨ ¯® •
LD BC,128 ; !HARDCODE ¤«¨­  £®à¨§®­â «ì­®© «¨­¨¨ ª à⨭ª¨
LDIR
OR A
JP NZ,.loop
POP BC
LD A,B
OUT (SLOT1),A
LD A,C
OUT (PORT_Y),A
XOR A
RET
; IF !ROM_LOGO_TEST
; LOGPAL: ; palitre for logotype
; IF TEST_Build
; INCBIN './test/test2_pal.bin'
; ELSE
; INCBIN './original/logo_pal.bin'
; ENDIF
;
; IF ($-LOGPAL) < 1024
; BLOCK +(1024-($-LOGPAL)),0
; ENDIF
; ENDIF
; Original hardcoded pallete for Peters logotype
; B G R
; DB #FF,#FF,#FF,#00
; DB #8C,#A5,#A5,#00
; DB #42,#EF,#EF,#00
; DB #DE,#CE,#C6,#00
; DB #84,#39,#39,#00
; DB #CE,#8C,#84,#00
; DB #A5,#39,#31,#00
; DB #84,#7B,#7B,#00
; DB #63,#5A,#5A,#00
; DB #BD,#39,#39,#00
; DB #84,#08,#08,#00
; DB #AD,#08,#08,#00
; DB #18,#00,#00,#00
; DB #63,#08,#10,#00
; DB #94,#08,#18,#00
; DB #00,#00,#00,#00
; PALCOL:
; ; B G R
; DB #FF,#FF,#FF,#00
; DB #8C,#BD,#BD,#80
; DB #BD,#CE,#BD,#00
; DB #EF,#CE,#BD,#00
; DB #BC,#73,#73,#00
; DB #9C,#63,#63,#00
; DB #DE,#8C,#8C,#00
; DB #8C,#52,#52,#00
; DB #BD,#63,#63,#00
; DB #52,#10,#10,#00
; DB #21,#00,#00,#00
; DB #8C,#00,#00,#00
; DB #AD,#00,#00,#00
; DB #AD,#10,#21,#00
; DB #8C,#00,#10,#00
; DB #00,#00,#00,#00
SET_CGA:
CALL SETPAL4
LD A,4 ; page_pal
LD HL,memBUFFER.Shared
LD DE,#0000 ; D - ELEMENTS,E - COLOR
LD B,def_pal_mask
CALL PIC_SET_PAL
LD A,6 ; page_pal
LD HL,memBUFFER.Shared
LD DE,#0000 ;D - ELEMENTS,E - COLOR
LD B,def_pal_mask
CALL PIC_SET_PAL
LD A,7 ; page_pal
LD HL,#80*4+memBUFFER.Shared
LD DE,#8080 ;D - ELEMENTS,E - COLOR
LD B,def_pal_mask
CALL PIC_SET_PAL
;
CALL SETPAL5
LD A,5 ; page_pal
LD HL,memBUFFER.Shared
LD DE,#0000 ;D - ELEMENTS,E - COLOR
LD B,def_pal_mask
CALL PIC_SET_PAL
LD A,7 ; page_pal
LD HL,memBUFFER.Shared
LD DE,#8000 ;D - ELEMENTS,E - COLOR
LD B,def_pal_mask
CALL PIC_SET_PAL
;
SETPAL4:
LD HL,COLORS.CGA.PALETTE
LD DE,memBUFFER.Shared
LD C,#08
DCR0: LD B,COLORS.CGA.PALETTE.ColNum
PUSH HL
;
DCR1: POP HL
PUSH HL
PUSH BC
LDI
LDI
LDI
LDI
POP BC
DJNZ DCR1
;
INC SP
INC SP
DEC C
JR NZ,DCR0
LD HL,memBUFFER.Shared
LD BC,512
LDIR
RET
SETPAL5:
LD HL,COLORS.CGA.PALETTE
LD DE,memBUFFER.Shared
LD B,#08
DCR01:
PUSH BC
PUSH HL
LD BC,16*4
LDIR
POP HL
POP BC
DJNZ DCR01
LD HL,memBUFFER.Shared
LD BC,512
LDIR
RET
include 'shared_includes/constants/standart_colors.inc'
;

View File

@ -0,0 +1,840 @@
; OnChangeAction:
; .setLang EQU 1
; .nothing EQU 2
; .setXYpos EQU 3
; .setInt EQU 4
; .setVsinc EQU 5
; DEFINE SPTeam_year '2022'
; DEFINE Disk_subsystem_ver_txt '3.05'
; DEFINE SetupVer '2.55'
LUA ALLPASS
function get_key_for_value(t, value)
for column=1,2 do
for line,name in pairs(t[column]) do
if name==value then return column,line end
end
end
return nil
end
function DeleteValueByDEFINE (t,zero_def,value)
if tonumber(sj.get_define(zero_def)) then
local delCol, delLine = get_key_for_value(t, value)
table.remove (t[delCol], delLine)
end
end
ENDLUA
LUA PASS1
SettingsTabsOrder = {
[1]={
"Lang", -- 1
"SaveRAMdrvs", -- 2
"StartDelay", -- 3
"RebootMsg", -- 4
"SysDsk", -- 5
"AltSysDsk", -- 6
"FddFirst", -- 7
"FddSecond", -- 8
"PriIdeMA", -- 9
"PriIdeSl", -- 10
"SecIdeMA", -- 11
"SecIdeSl", -- 12
"ScreenY", -- 13
"ScreenX", -- 14
"FrameInt", -- 15
"VSync", -- 16
"QuickStartROM", -- 17
"MemTest", -- DEFINES.INC --> UnusedSettingsFeatures
"UpdBios", -- DEFINES.INC --> UnusedSettingsFeatures
"TypRate", -- DEFINES.INC --> UnusedSettingsFeatures
"TypDelay", -- DEFINES.INC --> UnusedSettingsFeatures
},
[2]={
"LoadZXroms", -- 1
"TrDosA", -- 2
"TrDosB", -- 3
"TrDosC", -- 4
"TrDosD", -- 5
"SetTime", -- 6 DEFINES.INC --> NEW_FEATURE
"HddWrPr", -- 7 DEFINES.INC --> HDDwriteProtect
-- 8
-- 9
-- 10
-- 11
-- 12
-- 13
-- 14
-- 15
-- 16
-- 17
}
}
DeleteValueByDEFINE(SettingsTabsOrder,"NEW_FEATURE","SetTime")
DeleteValueByDEFINE(SettingsTabsOrder,"HDDwriteProtect","HddWrPr")
DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","MemTest")
DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","UpdBios")
DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","TypRate")
DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","TypDelay")
-- DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","")
-- DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","")
ENDLUA
;
;
MACRO _mSETitemParams itemName?
@.itemName? EQU $
DEFINE TmpDef itemName?
LUA ALLPASS
local tmpName = sj.get_define("TmpDef")
local column,line = get_key_for_value(SettingsTabsOrder, tmpName)
if (column == nil or line == nil) then sj.error("Settings Tab not found",tmpName) end
if column == 1 then column = _c("firstColumn") else column = _c("secondColumn") end
sj.insert_define("columnNum", column)
sj.insert_define("lineNum", (_c("firstLine")+line-1))
sj.insert_define("paramName", "msgStrings.par" .. tmpName)
ENDLUA
UNDEFINE TmpDef
ENDM
;
MACRO _mCreateSettingsItemsTabsAddrs
LUA ALLPASS
for i = 1, #SettingsTabsOrder do
for j = 1, #SettingsTabsOrder[i] do
_pc("DW " .. _c("SettingsItemsTabs." .. SettingsTabsOrder[i][j]))
end
end
ENDLUA
; á®§¤ ñâ â ªãî áâàãªâãàã:
; DW SettingsItemsTabs.FirstItem
; DW ..
; DW SettingsItemsTabs.LastItem
ENDM
MACRO _mCreateMsgAddrTable ; !FIXIT ¤®¤¥« âì ­  ¯à¨ñ¬ ¯ à ¬¥âà  "msgRusStrings.msg_",   «ãçè¥ ¢­ãâਠᠬ®¬ã ®¯à¥¤¥«ïâì íâã ¬¥âªã
LUA ALLPASS
for i = 0, _c("tmp_Counter")-1, 1 do
_pc("WORD " .. "msgRusStrings.msg_" .. i)
end
ENDLUA
; á®§¤ ñâ â ªãî áâàãªâãàã:
; WORD msgRusStrings.msg_0
; ..
; WORD msgRusStrings.msg_XX ; XX = tmp_Counter
ENDM
;----------------------------[Settings items table]----------------------------[v]
;
IF NEW_FEATURE
; New structure for procedure with IY reg
STRUCT MenusItem
Action WORD
Type BYTE
Column BYTE
Line BYTE
Name BYTE
CMOSreg BYTE
ValueMask BYTE
ValueMax BYTE
FirstString BYTE
ENDS
paramLine EQU 0
folderLine EQU 1
ENDIF
;
firstColumn EQU 03 ; ᬥ饭¨¥ ¯® X ¤«ï ¯¥à¢®£® á⮫¡æ 
secondColumn EQU 43 ; ᬥ饭¨¥ ¯® X ¤«ï ¢â®à®£® á⮫¡æ 
firstLine EQU 07 ; ᬥ饭¨¥ ¯® Y ¤«ï ¯¥à¢®© áâப¨
SettingsItemsTabs:
_mSETitemParams Lang
DW OnChangeAction.setLang ; ¤¥©á⢨¥ ¯à¨ ¨§¬¥­¥­¨¨
IF NEW_FEATURE : DB paramLine : ENDIF ; ⨯ ¯ à ¬¥âà  (áâப  á® §­ ç¥­¨¥¬ ¨«¨ ª â «®£)
DB columnNum,lineNum ; á⮫¡¥æ, áâப 
DB paramName ; <20> §¢ ­¨¥ ¯ à ¬¥âà 
DW CMOS_CELL.BootUpParams.Mask.Language : DB %0000'0100 ; CMOS : MASK
DB msgStrings.valLangEng ; 1-© ¢ à¨ ­â ¯ à ¬¥âà 
DB msgStrings.valLangRus ; 2-© ¢ à¨ ­â ¯ à ¬¥âà 
IF UnusedSettingsFeatures ; !TODO
_mSETitemParams MemTest
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.BootUpParams.Mask.MemTest : DB %1000'0000
DB msgStrings.valDisabled
DB msgStrings.valEnabled
ENDIF
_mSETitemParams SaveRAMdrvs
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.BootUpParams.Mask.SaveRAMdisks : DB %0100'0000
DB msgStrings.valDisabled
DB msgStrings.valEnabled
IF UnusedSettingsFeatures ; !TODO
_mSETitemParams UpdBios
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.BootUpParams.Mask.UpdBios : DB %0010'0000
DB msgStrings.valDisabled
DB msgStrings.valEnabled
ENDIF
_mSETitemParams StartDelay
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.BootUpParams.Mask.StartDelay : DB %0001'0000
DB msgStrings.valDisabled
DB msgStrings.valNormal
DB msgStrings.valEnabled
IF UnusedSettingsFeatures ; !TODO
_mSETitemParams TypRate
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.Typematic.Mask.Rate : DB %0000'0111
DB msgStrings.val_6
DB msgStrings.val_8
DB msgStrings.val_10
DB msgStrings.val_12
DB msgStrings.val_15
DB msgStrings.val_20
DB msgStrings.val_24
DB msgStrings.val_30
ENDIF
IF UnusedSettingsFeatures ; !TODO
_mSETitemParams TypDelay
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.Typematic.Mask.Delay : DB %0110'0000
DB msgStrings.val_250
DB msgStrings.val_500
DB msgStrings.val_750
DB msgStrings.val_1000
ENDIF
_mSETitemParams RebootMsg
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.Options.Mask.RebootMSG : DB %0000'0010
DB msgStrings.valDisabled
DB msgStrings.valEnabled
_mSETitemParams SysDsk
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.BootDrives.Mask.SysDisk : DB %0000'0111
DB msgStrings.val1stFDD
DB msgStrings.val2ndFDD
DB msgStrings.val1stIDE
DB msgStrings.val2ndIDE
DB msgStrings.val3rdIDE
DB msgStrings.val4thIDE
DB msgStrings.valRamDsk
DB msgStrings.valRecovery
_mSETitemParams AltSysDsk
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.BootDrives.Mask.AltSysDisk : DB %0111'0000
DB msgStrings.val1stFDD
DB msgStrings.val2ndFDD
DB msgStrings.val1stIDE
DB msgStrings.val2ndIDE
DB msgStrings.val3rdIDE
DB msgStrings.val4thIDE
DB msgStrings.valRamDsk
DB msgStrings.valRecovery
_mSETitemParams FddFirst
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.DrivesSetup_1.Mask.FirstFDD : DB %0000'0000
DB msgStrings.valAuto
; DB msgStrings.val720
; DB msgStrings.val1440
; DB msgStrings.valDash6
_mSETitemParams FddSecond
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.DrivesSetup_1.Mask.SecondFDD : DB %0000'0000
DB msgStrings.valAuto
; DB msgStrings.val720
; DB msgStrings.val1440
; DB msgStrings.valDash6
_mSETitemParams PriIdeMA
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.DrivesSetup_1.Mask.PriIDEmaster : DB %0011'0000
DB msgStrings.valAuto
DB msgStrings.valSetup
DB msgStrings.valCdRom
DB msgStrings.valDash6
_mSETitemParams PriIdeSl
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.DrivesSetup_1.Mask.PriIDEslave : DB %1100'0000
DB msgStrings.valAuto
DB msgStrings.valSetup
DB msgStrings.valCdRom
DB msgStrings.valDash6
_mSETitemParams SecIdeMA
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.DrivesSetup_2.Mask.SecIDEmaster : DB %0011'0000
DB msgStrings.valAuto
DB msgStrings.valSetup
DB msgStrings.valCdRom
DB msgStrings.valDash6
_mSETitemParams SecIdeSl
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.DrivesSetup_2.Mask.SecIDEslave : DB %1100'0000
DB msgStrings.valAuto
DB msgStrings.valSetup
DB msgStrings.valCdRom
DB msgStrings.valDash6
IF HDDwriteProtect
_mSETitemParams HddWrPr
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.Options.Mask.HDDwriteProtect : DB %0000'0001
DB msgStrings.valDisabled
DB msgStrings.valEnabled
ENDIF
_mSETitemParams ScreenY
DW OnChangeAction.setXYpos
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.ScreenPosition.Mask.X : DB %1110'0000
DB msgStrings.valMinus7
DB msgStrings.valMinus6
DB msgStrings.valMinus5
DB msgStrings.valMinus4
DB msgStrings.valMinus3
DB msgStrings.valMinus2
DB msgStrings.valMinus1
DB msgStrings.val_0
DB msgStrings.valPlus1
DB msgStrings.valPlus2
DB msgStrings.valPlus3
DB msgStrings.valPlus4
DB msgStrings.valPlus5
DB msgStrings.valPlus6
DB msgStrings.valPlus7
_mSETitemParams ScreenX
DW OnChangeAction.setXYpos
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.ScreenPosition.Mask.Y : DB %0000'1110
DB msgStrings.valPlus7
DB msgStrings.valPlus6
DB msgStrings.valPlus5
DB msgStrings.valPlus4
DB msgStrings.valPlus3
DB msgStrings.valPlus2
DB msgStrings.valPlus1
DB msgStrings.val_0
DB msgStrings.valMinus1
DB msgStrings.valMinus2
DB msgStrings.valMinus3
DB msgStrings.valMinus4
DB msgStrings.valMinus5
DB msgStrings.valMinus6
DB msgStrings.valMinus7
_mSETitemParams FrameInt
DW OnChangeAction.setInt
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.ScreenSET.Mask.Int : DB %0011'0000
DB msgStrings.valDash8
DB msgStrings.valScorpion
DB msgStrings.valPentagon
DB msgStrings.valSpectrum
_mSETitemParams VSync
DW OnChangeAction.setVsinc
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.ScreenSET.Mask.Sinc : DB %1000'0000
DB msgStrings.valDash8
DB msgStrings.val312_50
DB msgStrings.val320_49
_mSETitemParams QuickStartROM
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.BootUpParams.Mask.QuickStartROM : DB %0000'0001
DB msgStrings.parQuickStartSP
DB msgStrings.parQuickStartZX
_mSETitemParams TrDosA
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.TRDOSmount.Mask.A : DB %0000'0010
DB msgStrings.valDefault
DB msgStrings.valFDD
DB msgStrings.valHDD
_mSETitemParams TrDosB
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.TRDOSmount.Mask.B : DB %0000'1000
DB msgStrings.valDefault
DB msgStrings.valFDD
DB msgStrings.valHDD
_mSETitemParams TrDosC
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.TRDOSmount.Mask.C : DB %0010'0000
DB msgStrings.valDefault
DB msgStrings.valFDD
DB msgStrings.valHDD
_mSETitemParams TrDosD
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.TRDOSmount.Mask.D : DB %1000'0000
DB msgStrings.valDefault
DB msgStrings.valFDD
DB msgStrings.valHDD
_mSETitemParams LoadZXroms
DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum
DB paramName
DW CMOS_CELL.Options.Mask.LoadZXroms : DB %0000'1000
DB msgStrings.valLoadZXromsManually
DB msgStrings.valLoadZXromsFlag
DB msgStrings.valLoadZXromsCAD
IF NEW_FEATURE
_mSETitemParams SetTime
DW OnChangeAction.SetTime
DB folderLine
DB columnNum,lineNum
DB paramName
DB #00,%0000'0000,%0000'0000
DB msgStrings.valFolder
ENDIF
;--------------------[Items Addresses table]--------------------[]
SettingsItemsTabsAddrs:
_mCreateSettingsItemsTabsAddrs
.max EQU ($-SettingsItemsTabsAddrs)/2
; db on-change routine addr
; db X,Y
; db string-name number
; db CMOS, MASK
; db string-value number 1, .. , string-value number XX
;----------------------------------------------------------------[]
;----------------------------[Settings items table]----------------------------[^]
;
; !TODO ¤®¡ ¢¨âì íªá¯®àâ á®§¤ ¢ ¥¬ëå ¯¥à¥¬¥­­ëå ¢ ®â¤¥«ì­ë© ä ©« ¤«ï á¯à ¢ª¨
MACRO _mSetStr Suffix?, Num?
@.Suffix? EQU Num?
LUA ALLPASS
_pl("@.msg_" .. _c("Num?"))
ENDLUA
!tmp_Counter = tmp_Counter + 1
ENDM
;
;
;
; !TODO ¤®¡ ¢¨âì íªá¯®àâ á®§¤ ¢ ¥¬ëå ¯¥à¥¬¥­­ëå ¢ ®â¤¥«ì­ë© ä ©« ¤«ï á¯à ¢ª¨
MACRO _mSetStrRus Suffix?, Num?
DEFINE TmpDef Suffix?
LUA ALLPASS
if (_c("msgStrings." .. sj.get_define("TmpDef"))) ~= _c("Num?") then
sj.error("Sequence matching between Russian and English strings is broken!!!")
else
_pl("@.msg_" .. _c("Num?"))
end
ENDLUA
UNDEFINE TmpDef
!tmp_Counter = tmp_Counter + 1
ENDM
;
;
;
;==================================================================================================================================
; <20>¥ ¬¥­ïâì ¡¥§¤ã¬­® ­ §¢ ­¨¥ ¬¥âª¨ msgStrings !!! “ç áâ¢ã¥â ¢ LUA ¬ ªà®á¥ ¢ í⮬ ¦¥ ä ©«¥.
tmp_Counter DEFL 0
msgStrings:
_mSetStr copyRightPeters, tmp_Counter : DZ 'Copyright (c) 2002 Peters Plus'
_mSetStr copyRightSPTeam, tmp_Counter : DZ 'Copyright (c) 2009-', SPTeam_year, ' Sprinter Team'
_mSetStr setupBiosVer, tmp_Counter : DZ 'Sprinter BIOS v', BIOS_ver_string
_mSetStr setupCopyRight, tmp_Counter : DZ 'Copyright (c) 2002 Peters Plus, (c) 2009-', SPTeam_year, ' Sprinter Team'
_mSetStr setupUtilityVer, tmp_Counter : DZ 'SETUP Utility v', SetupVer
_mSetStr setupHelpStr1, tmp_Counter : DZ 'ESC : Quit F10 : Save & Exit Setup'
_mSetStr setupHelpStr2, tmp_Counter : DZ 'F2 : Save Values ',24,32,25,32,26,32,27,' : Select Item' ; ª®¤ë áâ५®ª ¢¬¥áâ¥ á ¯à®¡¥« ¬¨: 24,32,25,32,26,32,27
_mSetStr setupHelpStr3, tmp_Counter : DZ 'F5 : Old Values PU/PD/+/- : Modify'
_mSetStr setupHelpStr4, tmp_Counter : DZ 'F7 : Default Values F3 : Color '
_mSetStr toSetupButton, tmp_Counter : DZ '<DEL> to enter SETUP'
;_mSetStr forCtrlBootButton, tmp_Counter : DZ '<CTRL> for Recovery boot'
_mSetStr forAltBootButton, tmp_Counter : DZ '<ALT> for Alternative boot'
_mSetStr cmosChecksumErr, tmp_Counter : DZ 'WARNING! CMOS CHECKSUM ERROR, DEFAULT VALUES SET!'
_mSetStr cmosDateTimeErr, tmp_Counter : DZ 'WARNING! CMOS DATE/TIME ERROR, DEFAULT VALUES SET!'
_mSetStr detectIdePrMA, tmp_Counter : DZ ' Detecting IDE Primary Master ... [Press F4 to skip]'
_mSetStr detectIdePrSL, tmp_Counter : DZ ' Detecting IDE Primary Slave ... [Press F4 to skip]'
_mSetStr detectIdeSecMA, tmp_Counter : DZ ' Detecting IDE Secondary Master ... [Press F4 to skip]'
_mSetStr detectIdeSecSL, tmp_Counter : DZ ' Detecting IDE Secondary Slave ... [Press F4 to skip]'
_mSetStr ideUnknown, tmp_Counter : DZ 'Unknown '
_mSetStr ideNone, tmp_Counter : DZ 'None '
_mSetStr ideSkiped, tmp_Counter : DZ 'Skipped '
_mSetStr ideFail, tmp_Counter : DZ 'Fail ' ; !FIXIT strFail
_mSetStr spModel, tmp_Counter : DZ 'Model : '
.str_ACEX_MODEL EQU $$$+7 ; 㪠§ â¥«ì ­  áâப㠭¨¦¥ ¤«ï ¯ âç   ¯¤¥©â¥à®¬
_mSetStr spCNFver, tmp_Counter : DZ 'Core 1K30 : v'
_mSetStr spMemory, tmp_Counter : DZ 'Memory : '
_mSetStr cmosFound, tmp_Counter : DZ 'CMOS : Found'
_mSetStr cmosNone, tmp_Counter : DZ 'CMOS : None'
_mSetStr memoryAvailable, tmp_Counter : DZ 'Available : '
; _mSetStr unknownSTR1, tmp_Counter : DZ "7"
; _mSetStr unknownSTR2, tmp_Counter : DZ "8"
_mSetStr boardID, tmp_Counter : DZ 'Board ID : '
_mSetStr bootFdd, tmp_Counter : DZ 'Boot from Diskette'
; _mSetStr bootHdd, tmp_Counter : DZ 'Boot from Hard disk '
_mSetStr bootHdd, tmp_Counter : DZ 'Boot from HDD '
_mSetStr bootCd, tmp_Counter : DZ 'Boot from CD-ROM '
_mSetStr bootRamDrv, tmp_Counter : DZ 'Boot from RAM disk'
_mSetStr bootRecovery, tmp_Counter : DZ 'Starting recovery'
_mSetStr bootAltDrv, tmp_Counter : DZ 'Alternative '
_mSetStr bootFail, tmp_Counter : DZ ' fail' ; !FIXIT strFail
_mSetStr bootOk, tmp_Counter : DZ ' OK'
_mSetStr afterBootFail, tmp_Counter : DZ 'PRESS <ENTER> TO REBOOT, <DEL> TO ENTER SETUP OR <ESC> TO ZX-MODE . . .'
;
_mSetStr parLang, tmp_Counter : DZ 'Language (ï§ëª) : '
_mSetStr valLangEng, tmp_Counter : DZ 'English '
_mSetStr valLangRus, tmp_Counter : DZ '<EFBFBD>ãá᪨© '
_mSetStr parMemTest, tmp_Counter : DZ 'Memory test : '
_mSetStr valDisabled, tmp_Counter : DZ 'Disabled'
_mSetStr valEnabled, tmp_Counter : DZ 'Enabled '
_mSetStr parSaveRAMdrvs, tmp_Counter : DZ 'Save RAM-disks : '
_mSetStr parUpdBios, tmp_Counter : DZ 'Update BIOS : '
_mSetStr parStartDelay, tmp_Counter : DZ 'Start delay : '
_mSetStr valNormal, tmp_Counter : DZ 'Average '
_mSetStr parTypRate, tmp_Counter : DZ 'Typematic rate (chars/sec) : '
_mSetStr val_6, tmp_Counter : DZ '6 '
_mSetStr val_8, tmp_Counter : DZ '8 '
_mSetStr val_10, tmp_Counter : DZ '10'
_mSetStr val_12, tmp_Counter : DZ '12'
_mSetStr val_15, tmp_Counter : DZ '15'
_mSetStr val_20, tmp_Counter : DZ '20'
_mSetStr val_24, tmp_Counter : DZ '24'
_mSetStr val_30, tmp_Counter : DZ '30'
_mSetStr parTypDelay, tmp_Counter : DZ 'Typematic delay (Msec) : '
_mSetStr val_250, tmp_Counter : DZ '250 '
_mSetStr val_500, tmp_Counter : DZ '500 '
_mSetStr val_750, tmp_Counter : DZ '750 '
_mSetStr val_1000, tmp_Counter : DZ '1000'
_mSetStr parRebootMsg, tmp_Counter : DZ 'Reboot message : '
_mSetStr parSysDsk, tmp_Counter : DZ 'System disk : '
_mSetStr val1stFDD, tmp_Counter : DZ '1-st FDD'
_mSetStr val2ndFDD, tmp_Counter : DZ '2-nd FDD'
_mSetStr val1stIDE, tmp_Counter : DZ '1-st IDE'
_mSetStr val2ndIDE, tmp_Counter : DZ '2-nd IDE'
_mSetStr val3rdIDE, tmp_Counter : DZ '3-rd IDE'
_mSetStr val4thIDE, tmp_Counter : DZ '4-th IDE'
_mSetStr valRamDsk, tmp_Counter : DZ 'RAM-DISK'
_mSetStr valRecovery, tmp_Counter : DZ 'RECOVERY'
_mSetStr parAltSysDsk, tmp_Counter : DZ 'Alt. system disk : '
_mSetStr parFddFirst, tmp_Counter : DZ 'FDD first : '
_mSetStr valAuto, tmp_Counter : DZ 'Auto '
; _mSetStr val720, tmp_Counter : DZ '720K '
; _mSetStr val1440, tmp_Counter : DZ '1.44M '
_mSetStr valDash6, tmp_Counter : DZ '------'
_mSetStr parFddSecond, tmp_Counter : DZ 'FDD second : '
_mSetStr parPriIdeMA, tmp_Counter : DZ 'Primary IDE Master',#FF,' : '
_mSetStr valSetup, tmp_Counter : DZ 'Setup '
_mSetStr valCdRom, tmp_Counter : DZ 'CD-ROM'
_mSetStr parPriIdeSl, tmp_Counter : DZ 'Primary IDE Slave',#FF,' : '
_mSetStr parSecIdeMA, tmp_Counter : DZ 'Secondary IDE Master',#FF,' : '
_mSetStr parSecIdeSl, tmp_Counter : DZ 'Secondary IDE Slave',#FF,' : '
IF HDDwriteProtect
_mSetStr parHddWrPr, tmp_Counter : DZ 'HDD write protect : '
ENDIF
_mSetStr parScreenY, tmp_Counter : DZ 'Y-screen position : '
_mSetStr valMinus7, tmp_Counter : DZ '-7'
_mSetStr valMinus6, tmp_Counter : DZ '-6'
_mSetStr valMinus5, tmp_Counter : DZ '-5'
_mSetStr valMinus4, tmp_Counter : DZ '-4'
_mSetStr valMinus3, tmp_Counter : DZ '-3'
_mSetStr valMinus2, tmp_Counter : DZ '-2'
_mSetStr valMinus1, tmp_Counter : DZ '-1'
_mSetStr val_0, tmp_Counter : DZ ' 0'
_mSetStr valPlus1, tmp_Counter : DZ '+1'
_mSetStr valPlus2, tmp_Counter : DZ '+2'
_mSetStr valPlus3, tmp_Counter : DZ '+3'
_mSetStr valPlus4, tmp_Counter : DZ '+4'
_mSetStr valPlus5, tmp_Counter : DZ '+5'
_mSetStr valPlus6, tmp_Counter : DZ '+6'
_mSetStr valPlus7, tmp_Counter : DZ '+7'
_mSetStr parScreenX, tmp_Counter : DZ 'X-screen position : '
_mSetStr parFrameInt, tmp_Counter : DZ 'Frame interrupt : '
_mSetStr valDash8, tmp_Counter : DZ '--------'
_mSetStr valScorpion, tmp_Counter : DZ 'Scorpion'
_mSetStr valPentagon, tmp_Counter : DZ 'Pentagon'
_mSetStr valSpectrum, tmp_Counter : DZ 'Spectrum'
_mSetStr parVSync, tmp_Counter : DZ 'V-synchronization : '
_mSetStr val312_50, tmp_Counter : DZ '312/50Hz'
_mSetStr val320_49, tmp_Counter : DZ '320/49Hz'
_mSetStr parQuickStartROM, tmp_Counter : DZ 'Run in mode : '
_mSetStr parQuickStartZX, tmp_Counter : DZ 'Spectrum'
_mSetStr parQuickStartSP, tmp_Counter : DZ 'Sprinter'
_mSetStr valDefault, tmp_Counter : DZ 'Default'
_mSetStr valFDD, tmp_Counter : DZ 'FDD ' ; ????? ¯®¤ã¬ âì ª ª¨¥ ¢ à¨ ­âë ¢®§¬®¦­ë
_mSetStr valHDD, tmp_Counter : DZ 'HDD ' ; ????? ¯®¤ã¬ âì ª ª¨¥ ¢ à¨ ­âë ¢®§¬®¦­ë
_mSetStr parTrDosA, tmp_Counter : DZ 'TR DOS A:> : '
_mSetStr parTrDosB, tmp_Counter : DZ 'TR DOS B:> : '
_mSetStr parTrDosC, tmp_Counter : DZ 'TR DOS C:> : '
_mSetStr parTrDosD, tmp_Counter : DZ 'TR DOS D:> : '
_mSetStr parLoadZXroms, tmp_Counter : DZ 'Load ZX ROMs : '
_mSetStr valLoadZXromsManually, tmp_Counter : DZ 'Manually '
_mSetStr valLoadZXromsFlag, tmp_Counter : DZ 'By ZX flag'
_mSetStr valLoadZXromsCAD, tmp_Counter : DZ 'On restart'
; _mSetStrRus valLoadZXromsAuto, tmp_Counter : DZ 'On call '
IF NEW_FEATURE
_mSetStr parSetTime, tmp_Counter : DZ 'Date and time setup : '
_mSetStr valFolder, tmp_Counter : DB 16,'ENTER',17,0
ENDIF
IF BETA_BUILD > 0
_mSetStr testBIOSmsg, tmp_Counter : DZ 'Test build! ',BUILD_DATE,', ',__TIME__
ENDIF
;
MSG_ENG: ; !FIXIT ¯®¤áâ ¢¨âì ¬ ªà®á _mCreateMsgAddrTable ª®â®àë© ­ ¤® ¤®¤¥« âì ­  ¯à¨ñ¬ ¯ à ¬¥âà  "msgStrings.msg_" ¨«¨ "msgRusStrings.msg_"
LUA ALLPASS
for i = 0, _c("tmp_Counter")-1, 1 do
_pc("WORD " .. "msgStrings.msg_" .. i)
end
ENDLUA
/*
WORD msgStrings.msg_0
..
WORD msgStrings.msg_XX ; XX = tmp_Counter
*/
MSG_ENG.size EQU $-MSG_ENG
;==================================================================================================================================
;==================================================================================================================================
tmp_Counter = 0
msgRusStrings:
_mSetStrRus copyRightPeters, tmp_Counter : DZ 'Copyright (c) 2002 Peters Plus'
_mSetStrRus copyRightSPTeam, tmp_Counter : DZ 'Copyright (c) 2009-', SPTeam_year, ' Sprinter Team'
_mSetStrRus setupBiosVer, tmp_Counter : DZ 'Sprinter BIOS v', BIOS_ver_string
_mSetStrRus setupCopyRight, tmp_Counter : DZ 'Copyright (c) 2002 Peters Plus, (c) 2009-', SPTeam_year, ' Sprinter Team'
_mSetStrRus setupUtilityVer, tmp_Counter : DZ 'SETUP Utility v', SetupVer
_mSetStrRus setupHelpStr1, tmp_Counter : DZ 'ESC : ë©â¨ F10 : ®åà ­¨âì ¨ ¢ë©â¨'
_mSetStrRus setupHelpStr2, tmp_Counter : DZ 'F2 : ®åà ­¨âì §­ ç¥­¨ï ',24,32,25,32,26,32,27,' : ë¡®à ¯ã­ªâ '
_mSetStrRus setupHelpStr3, tmp_Counter : DZ 'F5 : â àë¥ §­ ç¥­¨ï PU/PD/+/- : ˆ§¬¥­¥­¨¥'
_mSetStrRus setupHelpStr4, tmp_Counter : DZ 'F7 : ­ ç¥­¨ï ¯® 㬮«ç ­¨î F3 : ¢¥â  '
_mSetStrRus toSetupButton, tmp_Counter : DZ '<DEL> ¤«ï ¢å®¤  ¢ SETUP'
;_mSetStrRus forCtrlBootButton, tmp_Counter : DZ '<CTRL> ¤«ï § £à㧪¨ Recovery'
_mSetStrRus forAltBootButton, tmp_Counter : DZ '<ALT> ¤«ï «ìâ¥à­ â¨¢­®© § £à㧪¨'
_mSetStrRus cmosChecksumErr, tmp_Counter : DZ '<EFBFBD>ˆŒ<EFBFBD>ˆ! Ž˜ˆ<EFBFBD>Š ŠŽ<EFBFBD><EFBFBD>Žœ<EFBFBD>Ž ŒŒ CMOS, <EFBFBD>Ž<EFBFBD> <EFBFBD><EFBFBD>ˆŸ <EFBFBD>Ž ŒŽ<EFBFBD>ˆž'
_mSetStrRus cmosDateTimeErr, tmp_Counter : DZ '<EFBFBD>ˆŒ<EFBFBD>ˆ! Ž˜ˆ<EFBFBD>Š /<EFBFBD>Œ<EFBFBD>ˆ CMOS, <EFBFBD>Ž<EFBFBD> <EFBFBD><EFBFBD>ˆŸ <EFBFBD>Ž ŒŽ<EFBFBD>ˆž'
_mSetStrRus detectIdePrMA, tmp_Counter : DZ ' Ž¯à¥¤¥«ï¥¬ <EFBFBD>¥à¢¨ç­ë© IDE Master ... [F4 ¤«ï ¯à®¯ã᪠] '
_mSetStrRus detectIdePrSL, tmp_Counter : DZ ' Ž¯à¥¤¥«ï¥¬ <EFBFBD>¥à¢¨ç­ë© IDE Slave ... [F4 ¤«ï ¯à®¯ã᪠]'
_mSetStrRus detectIdeSecMA, tmp_Counter : DZ ' Ž¯à¥¤¥«ï¥¬ â®à¨ç­ë© IDE Master ... [F4 ¤«ï ¯à®¯ã᪠]'
_mSetStrRus detectIdeSecSL, tmp_Counter : DZ ' Ž¯à¥¤¥«ï¥¬ â®à¨ç­ë© IDE Slave ... [F4 ¤«ï ¯à®¯ã᪠]'
_mSetStrRus ideUnknown, tmp_Counter : DZ '<EFBFBD>¥¨§¢¥áâ­ë© '
_mSetStrRus ideNone, tmp_Counter : DZ '<EFBFBD>¥â '
_mSetStrRus ideSkiped, tmp_Counter : DZ '<EFBFBD>யã饭 '
_mSetStrRus ideFail, tmp_Counter : DZ '<EFBFBD>¥ ®¯à¥¤¥«ñ­ '
_mSetStrRus spModel, tmp_Counter : DZ 'Œ®¤¥«ì : '
.str_ACEX_MODEL EQU $$$+7 ; 㪠§ â¥«ì ­  áâப㠭¨¦¥ ¤«ï ¯ âç   ¯¤¥©â¥à®¬ ; !FIXIT ? ¢ëâ¢ âì ç¥à¥§ FN_CRIPT.Acex_ver ?
_mSetStrRus spCNFver, tmp_Counter : DZ 'Ÿ¤à® 1K30 : v'
_mSetStrRus spMemory, tmp_Counter : DZ '<EFBFBD> ¬ïâì : '
_mSetStrRus cmosFound, tmp_Counter : DZ 'CMOS : <EFBFBD> ©¤¥­'
_mSetStrRus cmosNone, tmp_Counter : DZ 'CMOS : <EFBFBD>¥â'
_mSetStrRus memoryAvailable, tmp_Counter : DZ '®áâ㯭® : '
; _mSetStrRus unknownSTR1, tmp_Counter : DZ '7'
; _mSetStrRus unknownSTR2, tmp_Counter : DZ '8'
_mSetStrRus boardID, tmp_Counter : DZ 'ID ¯« âë : '
_mSetStrRus bootFdd, tmp_Counter : DZ ' ¯ãáª á ¤¨áª¥âë'
_mSetStrRus bootHdd, tmp_Counter : DZ ' ¯ã᪠á HDD '
_mSetStrRus bootCd, tmp_Counter : DZ ' ¯ã᪠á CD-ROM '
_mSetStrRus bootRamDrv, tmp_Counter : DZ ' ¯ã᪠á RAM ¤¨áª '
_mSetStrRus bootRecovery, tmp_Counter : DZ ' ¯ã᪠¢®ááâ ­®¢«¥­¨ï'
_mSetStrRus bootAltDrv, tmp_Counter : DZ '«ìâ¥à­ â¨¢­ë© '
_mSetStrRus bootFail, tmp_Counter : DZ ' ­¥¢®§¬®¦¥­'
_mSetStrRus bootOk, tmp_Counter : DZ ' OK'
_mSetStrRus afterBootFail, tmp_Counter : DZ '<EFBFBD>Œˆ <ENTER> Ÿ <EFBFBD><EFBFBD>ƒ<EFBFBD>Šˆ, <DEL> Ÿ <EFBFBD><EFBFBD>ŽŠ ˆˆ <ESC> Ÿ ZX-MODE . . .'
;
_mSetStrRus parLang, tmp_Counter : DZ 'Ÿ§ëª (language) : '
_mSetStrRus valLangEng, tmp_Counter : DZ 'English '
_mSetStrRus valLangRus, tmp_Counter : DZ '<EFBFBD>ãá᪨© '
_mSetStrRus parMemTest, tmp_Counter : DZ '¥áâ¨à®¢ ­¨¥ ¯ ¬ï⨠: '
_mSetStrRus valDisabled, tmp_Counter : DZ 'Žâª«î祭®'
_mSetStrRus valEnabled, tmp_Counter : DZ 'ª«î祭® '
_mSetStrRus parSaveRAMdrvs, tmp_Counter : DZ '®åà ­¥­¨¥ RAM-¤¨áª®¢ : '
_mSetStrRus parUpdBios, tmp_Counter : DZ 'Ž¡­®¢«¥­¨¥ BIOS : '
_mSetStrRus parStartDelay, tmp_Counter : DZ '<EFBFBD> ç «ì­®¥ ®¦¨¤ ­¨¥ : '
_mSetStrRus valNormal, tmp_Counter : DZ '।­¥¥ '
_mSetStrRus parTypRate, tmp_Counter : DZ 'ª®à®áâì  ¢â®¯®¢â®à  : '
_mSetStrRus val_6, tmp_Counter : DZ '6 '
_mSetStrRus val_8, tmp_Counter : DZ '8 '
_mSetStrRus val_10, tmp_Counter : DZ '10'
_mSetStrRus val_12, tmp_Counter : DZ '12'
_mSetStrRus val_15, tmp_Counter : DZ '15'
_mSetStrRus val_20, tmp_Counter : DZ '20'
_mSetStrRus val_24, tmp_Counter : DZ '24'
_mSetStrRus val_30, tmp_Counter : DZ '30'
_mSetStrRus parTypDelay, tmp_Counter : DZ ' ¤¥à¦ª   ¢â®¯®¢â®à  (Œá¥ª): '
_mSetStrRus val_250, tmp_Counter : DZ '250 '
_mSetStrRus val_500, tmp_Counter : DZ '500 '
_mSetStrRus val_750, tmp_Counter : DZ '750 '
_mSetStrRus val_1000, tmp_Counter : DZ '1000'
_mSetStrRus parRebootMsg, tmp_Counter : DZ '®®¡é¥­¨¥ ® ¯¥à¥§ £à㧪¥ : '
_mSetStrRus parSysDsk, tmp_Counter : DZ '¨á⥬­ë© ¤¨áª : '
_mSetStrRus val1stFDD, tmp_Counter : DZ '1-ë© FDD'
_mSetStrRus val2ndFDD, tmp_Counter : DZ '2-®© FDD'
_mSetStrRus val1stIDE, tmp_Counter : DZ '1-ë© IDE'
_mSetStrRus val2ndIDE, tmp_Counter : DZ '2-®© IDE'
_mSetStrRus val3rdIDE, tmp_Counter : DZ '3-¨© IDE'
_mSetStrRus val4thIDE, tmp_Counter : DZ '4-ë© IDE'
_mSetStrRus valRamDsk, tmp_Counter : DZ 'RAM-DISK'
_mSetStrRus valRecovery, tmp_Counter : DZ 'RECOVERY'
_mSetStrRus parAltSysDsk, tmp_Counter : DZ '«â. ¨á⥬­ë© ¤¨áª : '
_mSetStrRus parFddFirst, tmp_Counter : DZ 'FDD ¯¥à¢ë© : '
_mSetStrRus valAuto, tmp_Counter : DZ '¢â® '
; _mSetStrRus val720, tmp_Counter : DZ '720K '
; _mSetStrRus val1440, tmp_Counter : DZ '1.44M '
_mSetStrRus valDash6, tmp_Counter : DZ '------'
_mSetStrRus parFddSecond, tmp_Counter : DZ 'FDD ¢â®à®© : '
_mSetStrRus parPriIdeMA, tmp_Counter : DZ 'Primary IDE Master',#FF,' : '
_mSetStrRus valSetup, tmp_Counter : DZ 'Setup '
_mSetStrRus valCdRom, tmp_Counter : DZ 'CD-ROM'
_mSetStrRus parPriIdeSl, tmp_Counter : DZ 'Primary IDE Slave',#FF,' : '
_mSetStrRus parSecIdeMA, tmp_Counter : DZ 'Secondary IDE Master',#FF,' : '
_mSetStrRus parSecIdeSl, tmp_Counter : DZ 'Secondary IDE Slave',#FF,' : '
IF HDDwriteProtect
_mSetStrRus parHddWrPr, tmp_Counter : DZ ' é¨â  § ¯¨á¨ ­  HDD : '
ENDIF
_mSetStrRus parScreenY, tmp_Counter : DZ '¤¢¨£ íªà ­  ¯® Y : '
_mSetStrRus valMinus7, tmp_Counter : DZ '-7'
_mSetStrRus valMinus6, tmp_Counter : DZ '-6'
_mSetStrRus valMinus5, tmp_Counter : DZ '-5'
_mSetStrRus valMinus4, tmp_Counter : DZ '-4'
_mSetStrRus valMinus3, tmp_Counter : DZ '-3'
_mSetStrRus valMinus2, tmp_Counter : DZ '-2'
_mSetStrRus valMinus1, tmp_Counter : DZ '-1'
_mSetStrRus val_0, tmp_Counter : DZ ' 0'
_mSetStrRus valPlus1, tmp_Counter : DZ '+1'
_mSetStrRus valPlus2, tmp_Counter : DZ '+2'
_mSetStrRus valPlus3, tmp_Counter : DZ '+3'
_mSetStrRus valPlus4, tmp_Counter : DZ '+4'
_mSetStrRus valPlus5, tmp_Counter : DZ '+5'
_mSetStrRus valPlus6, tmp_Counter : DZ '+6'
_mSetStrRus valPlus7, tmp_Counter : DZ '+7'
_mSetStrRus parScreenX, tmp_Counter : DZ '¤¢¨£ íªà ­  ¯® X : '
_mSetStrRus parFrameInt, tmp_Counter : DZ 'Š ¤à®¢®¥ ¯à¥à뢠­¨¥ : '
_mSetStrRus valDash8, tmp_Counter : DZ '--------'
_mSetStrRus valScorpion, tmp_Counter : DZ 'ª®à¯¨®­'
_mSetStrRus valPentagon, tmp_Counter : DZ '<EFBFBD>¥­â £®­'
_mSetStrRus valSpectrum, tmp_Counter : DZ '¯¥ªâàã¬'
_mSetStrRus parVSync, tmp_Counter : DZ '¥àâ. ᨭåà®­¨§ æ¨ï : '
_mSetStrRus val312_50, tmp_Counter : DZ '312/50ľ'
_mSetStrRus val320_49, tmp_Counter : DZ '320/49ľ'
_mSetStrRus parQuickStartROM, tmp_Counter : DZ ' ¯ã᪠¢ ०¨¬¥ : '
_mSetStrRus parQuickStartZX, tmp_Counter : DZ '¯¥ªâàã¬'
_mSetStrRus parQuickStartSP, tmp_Counter : DZ '¯à¨­â¥à'
_mSetStrRus valDefault, tmp_Counter : DZ '<EFBFBD>® 㬮«ç ­¨î'
_mSetStrRus valFDD, tmp_Counter : DZ 'FDD '
_mSetStrRus valHDD, tmp_Counter : DZ 'HDD '
_mSetStrRus parTrDosA, tmp_Counter : DZ 'TR DOS A:> : '
_mSetStrRus parTrDosB, tmp_Counter : DZ 'TR DOS B:> : '
_mSetStrRus parTrDosC, tmp_Counter : DZ 'TR DOS C:> : '
_mSetStrRus parTrDosD, tmp_Counter : DZ 'TR DOS D:> : '
_mSetStrRus parLoadZXroms, tmp_Counter : DZ ' £à㦠âì ZX <EFBFBD> : '
_mSetStrRus valLoadZXromsManually, tmp_Counter : DZ 'àãç­ãî '
_mSetStrRus valLoadZXromsFlag, tmp_Counter : DZ '<EFBFBD>® ä« £ã ZX '
_mSetStrRus valLoadZXromsCAD, tmp_Counter : DZ '<EFBFBD>ਠà¥áâ àâ¥'
; _mSetStrRus valLoadZXromsAuto, tmp_Counter : DZ '<27>ਠ¢ë§®¢¥ '
IF NEW_FEATURE
_mSetStrRus parSetTime, tmp_Counter : DZ ' â  ¨ ¢à¥¬ï : '
_mSetStrRus valFolder, tmp_Counter : DB 16,'Ž',17,0
ENDIF
IF BETA_BUILD > 0
_mSetStrRus testBIOSmsg, tmp_Counter : DZ '¥á⮢ ï ᡮઠ! ',BUILD_DATE,', ',__TIME__
ENDIF
;
MSG_RUS:
_mCreateMsgAddrTable
MSG_RUS.size EQU $-MSG_RUS
;==================================================================================================================================
ASSERT MSG_ENG.size = MSG_RUS.size, "ERROR IN MESSAGE STRINGS: RUS and ENG do not match"
;

View File

@ -0,0 +1,245 @@
; ‚室 ç¥à¥§ USR 15600
ASSERT $ = #C0, "Error with RET_FROM_BIOS_TO_BASIC48 address!!!"
RET_FROM_BIOS_TO_BASIC48:
CALL CH_2
CALL COMAND_LINE ; <E2809A>Ž<C5BD><EFBFBD>ˆ… ŠŽŒ€<C592>, …‘‹ˆ …‘’œ
; ‚室 ¡¥§ ª®¬ ­¤ë
JP SW_ROM_1 ; އ<E280A1> << MAIN MENU >>
;-----------------------------------------------------------------------;
;
;
;----------------------------[ ??????????? ]----------------------------;
; TURBO_OFF:
; LD A,D_TBOFF
; OUT (SYS_PORT.ON),A
; RET
;
; TURBO_ON:
; LD A,D_TBON
; OUT (SYS_PORT.ON),A
; RET
;
; JP_HL: JP (HL)
;
;PRINT_LINE:
; LD A,(HL)
; INC HL
; CP 0FFh
; RET Z
; RST 10H
; JR PRINT_LINE
;
; JP RESET_128
;-----------------------------------------------------------------------;
;
;-----------------------------------------------------------------------;
; ******* SERVICE *******
;-----------------------------------------------------------------------;
;------[ „…˜ˆ<CB86>ˆŸ ŠŽŒ€<C592><EFBFBD>މ <E28098>ŽŠˆ,<2C><EFBFBD>…„€<E2809E><E282AC>މ „‹Ÿ "EXPANSION" ]-------;
COMAND_LINE:
LD HL,(#5C5D) ;!HARDCODE CH_ADR
COMAND_LOOP:
LD A,(HL)
INC HL
CP ":"
JR Z,COMAND_L1
CP ZX_Char.carriage_return
JR NZ,COMAND_LOOP
RET
COMAND_L1:
LD A,(HL)
CP ZX_Token.rem
RET NZ
INC HL
COMAND_OK: ; Ž<><C5BD><EFBFBD>“†…<E280A0>€ ŠŽŒ€<C592>„€ „‹Ÿ 'expansion'
LD A,(HL)
INC HL
CP ':'
JP Z,MENU_S1
CP ZX_Char.carriage_return
JP Z,MENU_S1
CP 'I'
JR Z,COMAND_ISD
CP 'i'
JR Z,COMAND_ISD
CP 'T'
JR Z,TASK_SWITCH
CP 't'
JR Z,TASK_SWITCH
DEC HL
POP BC
JP BASIC_MENU
MENU_S1:
POP BC
CALL SERVICE
JP SW_ROM_1
COMAND_ISD:
LD A,(HL)
INC HL
CP 'S'
JP Z,COMAND_ISD2
CP 's'
JP Z,COMAND_ISD2
RET
COMAND_ISD2:
POP BC
CALL ISDOS
JP SW_ROM_1
TASK_SWITCH:
; *** ‘®åà ­¨âì § ¤ çã ***
PUSH IY
PUSH IX
PUSH AF
PUSH BC
PUSH DE
PUSH HL
EXX
EX AF,AF'
PUSH AF
PUSH BC
PUSH DE
PUSH HL
LD A,R
PUSH AF
LD A,I
PUSH AF
LD A,(HL)
RLCA
RLCA
RLCA
RLCA
AND #30 ; ­®¢ ï § ¤ ç  0..3
LD C,A
IN A,(SLOT3)
LD B,A ; 3-ï áâà ­¨æ  ⥪ã饩 § ¤ ç¨
LD A,SYS_PAGE
OUT (SLOT3),A
LD IX,SYS_PAGE.TASK_DATA ; ¤ ­­ë¥ § ¤ ç
LD E,(IX) ; áâ à ï § ¤ ç 
LD D,0
ADD IX,DE ; ¤ ­­ë¥ ⥪ã饩 § ¤ ç¨
LD E,16
ADD IX,DE ; ᬥ饭¨¥ ¤ ­­ëå ¢ â ¡«¨æ¥ § ¤ ç
LD (IX+1),B ; á®åà ­¨âì áâà ­¨æã 3
LD HL,0
ADD HL,SP
LD (IX+2),L ; á®åà ­¨âì á⥪ § ¤ ç¨
LD (IX+3),H
SET 0,(IX) ; ãáâ ­®¢¨âì ä« £ á®åà ­¥­­®á⨠⥪ã饩 § ¤ ç¨
RES 1,(IX) ; ãáâ ­®¢¨âì ä« £, çâ® § ¤ ç  ¯®ª¨­ãâ 
LD IX,SYS_PAGE.TASK_DATA
LD E,C
LD D,0
ADD IX,DE ; ­®¢ ï § ¤ ç 
LD E,16
ADD IX,DE ; ᬥ饭¨¥ ¤ ­­ëå ¢ â ¡«¨æ¥ § ¤ ç
BIT 1,(IX)
; JR NZ,TASK_IN_WORK ; § ¤ ç  ¢ à ¡®â¥ ??? ­¥¢¥à­®¥ § ¢¥à襭¨¥
; á¡à á뢠âì ¨«¨ ¯à®áâ® ¢®§¢à é âìáï
BIT 0,(IX) ; ¡ë«  á®åà ­¥­ /­¥â
JR NZ,TASK_SET ; § ¤ ç  áãé¥áâ¢ã¥â
; § ¤ ç¨ ­¥ ¡ë«®!
LD IX,SYS_PAGE.TASK_DATA
LD A,C ; § ¤ ç 
LD (IX),A ; ãáâ ­®¢¨âì ­®¢ãî § ¤ çã ⥪ã饩
JP SPECTRUM_TASK ; § ¯ãáâ¨âì ­®¢ãî § ¤ çã!
; ¨ ¯®ª  ¯®ä¨£ à á¯à¥¤¥«¥­¨¥ ¯ ¬ïâ¨!
TASK_SET:
LD IX,TASK_RESTORE
LD A,C
EXX
JP INIT_PAGES ; ¯¥à¥ª«îç¨âì ¢á¥ áâà ­¨æë!
TASK_RESTORE:
EXX
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,C
LD IX,SYS_PAGE.TASK_DATA
LD (IX),A ; ãáâ ­®¢¨âì ­®¢ãî § ¤ çã ⥪ã饩
LD E,A
LD D,0
ADD IX,DE ; ­®¢ ï § ¤ ç 
LD E,16
ADD IX,DE
LD L,(IX+2) ; ¢á¯®¬­¨âì á⥪
LD H,(IX+3)
LD SP,HL
LD A,(IX+1) ; ¢á¯®¬­¨âì âà¥âìî áâà ­¨æã
OUT (SLOT3),A
POP AF ; ¢®ááâ ­®¢¨âì
LD I,A
POP AF
LD R,A
POP HL
POP DE
POP BC
POP AF
EX AF,AF'
EXX
POP HL
POP DE
POP BC
POP AF
POP IX
POP IY
; ¢¥à­ãâìáï ¢ § ¤ çã
NO_TASK:
POP BC
JP SW_ROM_1
; 259F - ADRESS BASIC128 - MAIN_MENU
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
; *** UTILITES ***
;-----------------------------------------------------------------------;
; C_0030: ; ¯®«ãç¨âì à ¡ ®¡«
; CALL_48X 0030h
; RET
C_19E8: ; ®ç¨áâ¨âì à ¡ ®¡«
CALL_48X #19E8 ;!HARDCODE
RET
C_1655: ; ¯®«ãç¨âì ¯à®áâà ­á⢮
CALL_48X #1655 ;!HARDCODE
RET
CLS:
C_0D6B: CALL_48 #0D6B ;!HARDCODE
RET
CH_2: LD A,2
C_1601: ; OPEN CHANEL
CALL_48 #1601 ;!HARDCODE
RET
;

View File

@ -0,0 +1,747 @@
; "MENU PROGRAMS."
;*********************************
; FOR INCLUDE !!!
;*********************************
; Ž¡á«ã¦¨¢ ­¨¥ Œ…<C592>ž
; HL -  ¤à¥á â ¡«¨æë ¯à®£à ¬¬
; A - ­®¬¥à ¢ â ¡«¨æ¥
; ¥á«¨ A=-1, â® ¢®§¢à â,
; ¨­ ç¥ ¢ë¯®«­¥­¨¥
;*****************************
EXEC_PNT:
INC A
RET Z
;!FIXIT ¯®ç¥¬ã ­¥ â ª?
; DEC A
; JR Z,EXEC_HL
; LD D,0
; LD E,A
; XOR A
; ADC HL,DE
; ADC HL,DE
;
EXEC_PNT_LOOP:
DEC A
JR Z,EXEC_HL
INC HL
INC HL
JR EXEC_PNT_LOOP
EXEC_HL:
LD E,(HL)
INC HL
LD D,(HL)
INC HL
EX DE,HL
JP (HL)
RET_FROM_M:
POP HL
RET
;****************************************
; <20><EFBFBD>Ž MENU_128
;****************************************
; ‚•Ž„: DE -  ¤à¥á ¬¥­î
; BC - ¤«¨­  ¬¥­î
; ‚›•Ž„: A - ¢ë¡à ­­ë© ¯ã­ªâ
;****************************************
RUN_MENU:
PUSH IX
PUSH DE ; DE - MENU
PUSH BC ; BC - len_menu
LD A,(DE)
DEC A ; ç¨á«® CMD
CP 9 ; !HARDCODE ¬ ª¨á¬ «ì­®¥ ç¨á«® ¯ã­ªâ®¢ ¬¥­î
JR C,RUN_M_1
RUN_MN_ERR:
POP BC
POP DE
LD A,#FF ; ¢¥à­ãâìáï á ­®¬¥à®¬ 255 - ®è¨¡ª 
POP IX
RET
RUN_M_1:
LD A,(ZX_VARS.PROG.SWAP_ROM)
CP #F5 ; áà ¢­¨âì € á ®¯ª®¤®¬ PUSH AF
JR NZ,RUN_MN_ERR
LD HL,LEN_P_M
ADD HL,BC ; HL - ­ã¦­ ï ¤«¨­  ¯ ¬ïâ¨
LD B,H ; HL -> BC
LD C,L
LD HL,(ZX_VARS.WORK_SPACE) ; HL - ­ ç «® à ¡ ®¡«
PUSH BC
PUSH HL
CALL C_1655 ; ¯®«ãç¨âì à ¡®çãî ¯ ¬ïâì
POP DE
PUSH DE ; ­ ç «® à ¡ ®¡«
LD BC,LEN_P_M ; ¤«¨­  ¯à®£à ¬¬ë ¬¥­î
LD HL,MENU_128 ; á ¬  ¯à®£à ¬¬ 
LDIR ; ¯à®£à ¬¬  ¯¥à¥¬¥é¥­ . DE - ¬¥áâ® ¤«ï MENU
POP BC
PUSH BC ; ­ ç «® ¯à®£à ¬¬ë
PUSH DE ; á®åà ­¨âì ¬¥áâ® ¤«ï MENU
LD DE,MN_128_S ; ¤ ­­ë¥ ¤«ï shifter
CALL SHIFTER ; ¨§¬¥­¨âì ¤ ­­ë¥ ¢ ᮮ⢥âá⢨¨ á ¯®«®¦¥­¨¥¬ ¢ MEM
POP DE ; ¢¥à­ãâì ¬¥áâ® ¤«ï MENU
POP HL ; ­ ç «® ¯à®£à ¬¬ë
POP IX ; ¤«¨­  ¤ ­­ëå
POP BC ; ¤«¨­  ¬¥­î
EX (SP),HL ; HL - ¬¥­î
LDIR ; ¯¥à¥¬¥áâ¨âì ¤ ­­ë¥ MENU
POP HL ;  ¤à¥á ¯à®£à ¬¬ë MENU
PUSH HL
PUSH IX ; ¤«¨­  à ¡. ®¡«
CALL JP_HL ; ¢ë§®¢ ¯à®£à ¬¬ë MENU
POP BC ; ¢¥à­ãâì ¤«¨­ã à ¡ ®¡«
POP HL ; ¨ ­ ç «  ¯à®£à ¬¬ë
PUSH AF ; á®åà ­¨âì ­®¬¥à ¢ë¡®à 
CALL C_19E8 ; ®á¢®¡®¤¨âì ¯ ¬ïâì !!
POP AF ; ¢¥à­ãâì ­®¬¥à ¢ë¡®à 
POP IX
RET ; ¢®§¢à â ¨§ ¯à®£à ¬¬ë RUN_MENU
JP_HL: JP (HL)
;**************************************
; 128k MENU
;**************************************
;!HARDCODE
MENU_PROG EQU #25B9 ; #25B9 in sp_128.asm
;SWAP_ROM EQU #5B00
NEW_SP EQU #1F45 ; L1F45: in sp_128.asm
RET_SP EQU #1F20 ; L1F20: in sp_128.asm
;**************************************
; <20>ணࠬ¬  ¢ë§®¢  MENU_128 ¨§ އ“.
;**************************************
MN_128_S:
DB SH_1 - MENU_128+1
DB SH_2 - MENU_128+1
DB SH_3 - MENU_128+1
DB SH_4 - MENU_128+1
DB SH_5 - MENU_128
DB SH_6 - MENU_128
DB SH_7 - MENU_128
DB SH_8 - MENU_128
DB SH_9 - MENU_128
DB SH_A - MENU_128
DB SH_B - MENU_128
DB SH_C - MENU_128
DB 0
;**************************************
; <20>â  ¯à®£à ¬¬  ¯¥à¥¬¥é ¥âáï ¢ ®§ã
;**************************************
MENU_128:
XOR A
OUT (SYS_PORT.RAM),A
CALL ZX_VARS.PROG.SWAP_ROM
CALL NEW_SP
SH_1: LD DE,MENU_DAT - MENU_128
LD HL,ZX_VARS.MENU_TBL.JUMP
LD BC,4
LDIR
SH_2: LD HL,MENU_128_E - MENU_128
LD (ZX_VARS.MENU_TBL.JUMP),HL
SH_3: LD HL,MENU_128_E2 - MENU_128
LD (ZX_VARS.MENU_TBL.TEXT),HL
JP MENU_PROG
RET_M EQU $-MENU_128
SH_4: LD HL,MENU_DAT - MENU_128
LD DE,ZX_VARS.MENU_TBL.JUMP
LD BC,4
LDIR
CALL RET_SP
CALL ZX_VARS.PROG.SWAP_ROM
EX AF,AF'
;LD A,0
;OUT (CNF_PORT),A
LD A,SYS_PORT.EXTENSION
OUT (SYS_PORT.ROM),A ;!!!!! ¢¥àá¨ï ¤«ï <20>‡“
EX AF,AF'
RET
MENU_DAT:
DW 0,0
MENU_128_E:
DB 8
DB 0
SH_5: DW RET_M
DB 1
SH_6: DW RET_M
DB 2
SH_7: DW RET_M
DB 3
SH_8: DW RET_M
DB 4
SH_9: DW RET_M
DB 5
SH_A: DW RET_M
DB 6
SH_B: DW RET_M
DB 7
SH_C: DW RET_M
MENU_128_E2:
LEN_P_M EQU $-MENU_128
;**************************************
; RST 30 - ¯®«ã祭¨¥ BC SPACES á  ¤à¥á  HL
; #19E8 - ®á¢®¡®¦¤¥­¨¥ BC spaces á  ¤à¥á  HL
; HL - à ¡. ï祩ª 
; BC -  ¤à¥á ¯à®£à ¬¬ë
; DE -  ¤à¥á ¤ ­­ëå ¤«ï ¯¥à¥¬¥é¥­¨ï
SHIFTER:
LD A,(DE) ; (DE) - SHIFT IN PROG
AND A
RET Z
INC DE
LD L,A
LD H,0
ADD HL,BC ; HL - ADRESS FOR SHIFT
LD A,(HL) ; (HL)=(HL)+BC
ADD A,C
LD (HL),A
INC HL
LD A,(HL)
ADC A,B
LD (HL),A
JR SHIFTER
;*******************************************
; Œ…<C592>ž : ¡ ©â 1 - ¤«ï १ã«ìâ â 
; ¡ ©â 2 - ç¨á«® ¯ã­ªâ®¢ +1
; ­ §¢ ­¨¥ ¬¥­î, ª®¤ 0FFh ( COPY )
; ¯ã­ªâë ¬¥­î ®ª®­ç ­¨¥ ¡ ©â®¬ á
; ãáâ, 7-¬ ¡¨â®¬ + ¯ãáâ ï áâப  !!
;*******************************************
BASIC_MENU:
; LD A,(HL)
; CP 'S'
; JP Z,SET_SYSTEM
LD DE,(ZX_VARS.CH_ADR)
PUSH DE
LD (ZX_VARS.CH_ADR),HL
CALL_48X #1C8C ; SYMBOL VAR
CALL_48X #2BF1 ; input txt !!!
; DE - adr
; BC - len
PUSH DE
PUSH BC
INC DE
CALL TST_M
JR C,NO_EXE_M
CALL RUN_MENU
LD (IY+0),255
NO_EXE_M:
POP BC
POP DE
LD (DE),A
POP HL
LD (ZX_VARS.CH_ADR),HL
JP SW_ROM
TST_M:
PUSH DE
PUSH BC
EX DE,HL
LD D,(HL)
INC D
LD A,255
CPIR
JR NZ,ERR_TST_M
LOOP_TST_M:
LD A,B
OR C
JR Z,ERR_TST_M
BIT 7,(HL)
INC HL
DEC BC
JR Z,LOOP_TST_M
DEC D
JR NZ,LOOP_TST_M
POP BC
POP DE
AND A
RET
ERR_TST_M:
POP BC
POP DE
LD A,255
SCF
RET
;**************************************
CALL_DOS_MOVE:
LD HL,DOS_PROG
LD DE,DOS_PROG.Exec
LD BC,DOS_PROG.Size
LDIR
RET
;
; HL -  ¤à¥á ª®¬ ­¤ë, BC - ¤«¨­  ª®¬ ­¤ë
CALL_DOS1:
LD C,(HL)
INC HL
LD B,0
LD DE,(ZX_VARS.E_LINE)
LD (ZX_VARS.CH_ADR),DE
LDIR
LD (ZX_VARS.WORK_SPACE),DE
LD (ZX_VARS.STK_BOT),DE
LD (ZX_VARS.STK_END),DE
CALL CALL_DOS_MOVE
JP DOS_PROG.Exec
DOS_PROG:
DISP #5C00 - DOS_PROG.Size ;!HARDCODE
//DOS_PROG:
.Exec: PUSH AF
XOR A
OUT (SYS_PORT.RAM),A
POP AF
//DOS_PROG_A+1:
.Patch+2: CALL #3D03 ;!HARDCODE
PUSH AF
;!FIXIT ᤥ« âì ç¥à¥§ ãá«®¢¨¥ ª®¬¯¨«ï樨 ZX_ROM_BIOS
//LD A,0
//OUT (CNF_PORT),A
LD A,SYS_PORT.EXTENSION
OUT (SYS_PORT.ROM),A ;!!!!! ¢¥àá¨ï ¤«ï <20>‡“
POP AF
RET
//DOS_PROG_LEN
.Size EQU $ - .Exec
ENT
;????? ¢à®¤¥, ­¥ ¨á¯®«ì§ãîâáï
CONT_PROG:
LD HL,#1AFD ;!HARDCODE COM_LN:
PUSH HL
LD HL,#5B00 ;!HARDCODE
PUSH HL
LD DE,ZX_VARS.FLG_INPUT
LD BC,1
LD A,#E8 ;!HARDCODE
LD (DE),A
JP SW_ROM
CALL_DOS:
PUSH HL
PUSH DE
PUSH BC
PUSH AF
CALL CALL_DOS_MOVE
LD A,#13 ;!HARDCODE #13 ¨§ AUTO_1303
LD (DOS_PROG.Patch),A
POP AF
POP BC
POP DE
POP HL
JP DOS_PROG.Exec
;
;
;=======================================================================;
;=======================================================================;
;=======================================================================;
SERVICE:
//LD HL,SR_TAB
LD DE,SR_MENU
LD BC,SR_MENU.Size
//PUSH HL
CALL RUN_MENU ;09f3
LD HL,SR_TAB
//POP HL
CALL EXEC_PNT
JR SERVICE
SR_TAB: DW UTILIT
DW GOTO_TRDOS.m128
DW GOTO_TRDOS.m48
DW TURBO_OFF
DW TURBO_ON
DW CLEAR_RAM
DW RET_FROM_M
; DC - every last character of a string will have bit 7 set
SR_MENU:
BYTE 8 ; ª®«¨ç¥á⢮ ¯ã­ªâ®¢
BYTE 'Options ',#FF ; § £®«®¢®ª ¬¥­î
DC 'RUN disk.trd'
DC '128 TR-DOS'
DC '48 TR-DOS'
DC 'TURBO OFF '
DC 'TURBO ON '
DC 'Clear RAM'
DC 'RETURN'
DC " " ; ¬ àª¥à ª®­æ 
.Size EQU $-SR_MENU
;*****************************
;SR_48R:
GOTO_TRDOS:
.m128: LD A,#10
JR .RUN
;SR_48:
.m48: LD A,#30 ; ‘⮯®à ­  PORT_128 !!!
;SR_48A:
.RUN: LD BC,#7FFD
OUT (C),A
LD BC,0 ; <20>€ 0 !!
PUSH BC
LD BC,#3D2F ; DOS !
PUSH BC
JP SW_ROM
;*******************************
TURBO_OFF:
LD A,BIOS.FN_TURBO.OFF
LD C,BIOS.FN_TURBO
JP_to_BIOS
TURBO_ON:
LD A,BIOS.FN_TURBO.ON
LD C,BIOS.FN_TURBO
JP_to_BIOS
;*******************************
CLEAR_RAM:
DI
LD C,BIOS.FullInit
RST_to_BIOS
; ¯à¨ ®ç¨á⪥ ¯ ¬ï⨠¨§ ¬¥­î ᯥªâà㬠 ¢®§¢à â ¢ DSS ¯® CAD
; ¡ã¤¥â ®¯ á­ë¬ (RAM Blocks ®á¢®¡®¤¨«¨áì),
; ¯®í⮬㠮⪫îç ¥¬ ¯¥à¥å¢ â à¥á¥â .
LD A,ACEX.RET_PORT
LD BC,BIOS.SET_PORTS
;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23
;CALL ToBIOS_3D13
RST_to_BIOS
;
EI
RET
;SR_CL_MEM:
; DI
; LD A,10H
;SR_CL_R2:
; LD BC,1FFDH
; OUT (C),A
; EX AF,AF'
; XOR A
;SR_CL_R1:
; LD BC,7FFDH
; OUT (C),A
; LD HL,0C000H
; LD DE,0C001H
; LD BC,03FFFH
; LD (HL),L
; LDIR
; INC A
; CP 48H
; JR NZ,SR_CL_R1
; EX AF,AF'
; CP 0
; JP Z,BASIC_128 ; ¢ë室 ­  á¡à®á BASIC 128
; LD A,0
; JR SR_CL_R2
;*****************************
; *** MENU IS-DOS ***
;*****************************
ISDOS:
LD HL,IS_TAB
LD DE,IS_MENU
LD BC,IS_MENU.Size
PUSH HL
CALL RUN_MENU
POP HL
CALL EXEC_PNT
JR ISDOS
IS_TAB:
; DW TR_DOS
; DW SP_DOS
DW SPRINTER_1X
DW AY8910_X
DW PENTAGON
DW SCORPION
DW PENTAGON512
DW SPRINTER_reset ;SPRINTER_2X
DW RET_FROM_M
; DC - every last character of a string will have bit 7 set
IS_MENU:
BYTE 8 ; ª®«¨ç¥á⢮ ¯ã­ªâ®¢
BYTE 'Hardware',#FF ; § £®«®¢®ª ¬¥­î
DC 'Sprinter ZX '
DC 'ZX Spectrum'
DC 'Pentagon 128'
DC 'Scorpion 256'
DC 'Pentagon 512'
DC 'Restart '
DC 'RETURN'
DC " " ; ¬ àª¥à ª®­æ 
.Size EQU $-IS_MENU
;******************************
;SP_DOS:
; LD B,0E2H
; LD A,0E1H
; JR TR_DOS1
;TR_DOS:
; LD B,0EAH
; LD A,0E1H
;TR_DOS1:
; CALL DOS_ON
; CALL SET_ROM_PAGES
; CALL DOS_OFF
; RET
;******************************
;**************************************************
;Sprinter ZX
SPRINTER_1X:
CALL _SET_CNF
LD C,BIOS.RST_CONF.SP97_1
RST_to_BIOS
CALL CNF_PN_320
LD L,2 ;FN_SYNC.INT_PENT
JR 1F ;!FIXIT ¬¥âªã ¯à¨¤ã¬ âì
;
;ZX Spectrum
AY8910_X:
CALL _SET_CNF
LD C,BIOS.RST_CONF.AY8910
RST_to_BIOS
LD A,#FA ; no ACC, Original waits
LD (Port_All_Mode),A
CALL CNF_SC_312
LD L,3 ;FN_SYNC.INT_ORIG
1: LD DE,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
CALL CONFIG_SET
CALL CLS ;!FIXIT ­ã¦­® «¨?
RET
;
SCORPION:
CALL _SET_CNF
CALL CNF_SC_312
LD L,1 ;FN_SYNC.INT_SCORP
LD DE,CNF_PORT.CNF_1 + CNF_PORT.TURBO.ON
JR CONFIG_SET
PENTAGON:
CALL _SET_CNF
CALL CNF_PN_320
LD L,2 ;FN_SYNC.INT_PENT
LD DE,CNF_PORT.CNF_2 + CNF_PORT.TURBO.ON
JR CONFIG_SET
PENTAGON512:
CALL _SET_CNF
CALL CNF_PN_320
LD L,2 ;FN_SYNC.INT_PENT
LD DE,CNF_PORT.CNF_2 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_512
; JR CONFIG_SET
CONFIG_SET:
PUSH DE
EI
HALT
DI
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD (SYS_PAGE.CONFIG_DE),DE
;!FIXIT ¥áâì «¨ á¬ëá« ¤¥« âì ¤® FN_SYNC?
LD A,(ZX_VARS.BORDER)
RRCA
RRCA
RRCA
AND 7
OUT (BorderColor),A
;
EX AF,AF'
OUT (SLOT3),A
LD A,L
LD C,BIOS.FN_SYNC
RST_to_BIOS
LD HL,#4104 ;!HARDCODE
LD E,0
LD BC,256*4 + BIOS.LP_OPEN_S ;!HARDCODE
RST_to_BIOS
LD HL,#5104 ;!HARDCODE
LD E,0
LD BC,256*4 + BIOS.LP_OPEN_S
RST_to_BIOS
POP DE
LD A,E
OUT (SYS_PORT.ROM),A
IM 1
EI
RET
SPRINTER_reset:
CALL _SET_CNF
LD BC,256*BIOS.REINIT.SOFT_RESET + BIOS.REINIT
JP_to_BIOS
_SET_CNF:
DI
LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
OUT (SYS_PORT.ROM),A
RET
CNF_SC_312:
LD A,Port_VSYNC.SET_312L
OUT (Port_VSYNC),A
RET
CNF_PN_320:
LD A,Port_VSYNC.SET_320L
OUT (Port_VSYNC),A
RET
; LD A,CNF_0
; OUT (SYS_PORT.ROM),A
; CALL DOS_OFF
; JP 0
;*****************************
; *** MENU UTILITES ***
;*****************************
;!FIXIT íâ® § ¯ã᪠c:\disk.trd - ­¥ ¤ã¬ î, çâ® íâ® ­ã¦­®, ¬®¦­® § ¬¥­¨âì
UTILIT:
LD HL,C_DISK_C
CALL CALL_DOS1
;CALL DOS_ON
;LD A,0 ; DETECT_HDD
;CALL EXP_HDD
LD C,BIOS.HDD_INIT
RST_to_BIOS
;CALL DOS_OFF
JR C,DISK_UTILIT
LD HL,C_DISK_C3
CALL CALL_DOS1
UTIL_DISK:
XOR A
LD C,BIOS.FreeMemRMD
RST_to_BIOS
LD HL,C_DEMO6
CALL CALL_DOS1
XOR A
LD C,BIOS.GET_RAMD_ST
RST_to_BIOS
JR C,UTIL_DISK_L1
JR Z,UTIL_DISK_L1
LD HL,C_DISK_C1
CALL CALL_DOS1
LD HL,C_DISK_C2
CALL CALL_DOS1
RET
UTIL_DISK_L1:
LD A,(ZX_VARS.OPER_DISK)
INC A
CP 2
JR Z,DISK_UTIL_RET
LD HL,C_DISK_C5
CALL CALL_DOS1
JR UTIL_DISK
DISK_UTIL_RET:
LD HL,C_DISK_C6
CALL CALL_DOS1
RET
DISK_UTILIT:
LD HL,C_DISK_C4
CALL CALL_DOS1
JR UTIL_DISK
C_DEMO6: DB .Size, ZX_Token.rem, ':/disk.trd', 13,80
.Size EQU $-C_DEMO6-1
;***************************************
;VERSION: DEFB 22,21,0
; DEFB 16,2,"Expansion 3.02  1997 ELSY Co.",16,1,0FFh
;**********************************************
DOS_RUN:
LD HL,C_DISK_C1
CALL CALL_DOS1
LD HL,C_DISK_C2
CALL CALL_DOS1
RET
START_TRD:
LD HL,C_DISK_C
CALL CALL_DOS1
LD HL,C_DISK_C0
CALL CALL_DOS1
LD HL,C_DISK_C3
CALL CALL_DOS1
RET
C_DISK_C: DB .Size, ZX_Token.rem, ':', 13,80
.Size EQU $-C_DISK_C-1
C_DISK_C0: DB .Size, ZX_Token.rem, ':/CLEAR E', 13,80
.Size EQU $-C_DISK_C0-1
C_DISK_C1: DB .Size, ZX_Token.rem, ':/RMD E', 13,80
.Size EQU $-C_DISK_C1-1
C_DISK_C2: DB .Size, ZX_Token.rem, ':RUN', 13,80
.Size EQU $-C_DISK_C2-1
C_DISK_C3: DB .Size, ZX_Token.rem, ':/HDD', 13,80
.Size EQU $-C_DISK_C3-1
C_DISK_C4: DB .Size, ZX_Token.rem, ':/FDD', 13,80
.Size EQU $-C_DISK_C4-1
C_DISK_C5: DB .Size, ZX_Token.rem, ':/B:', 13,80
.Size EQU $-C_DISK_C5-1
C_DISK_C6: DB .Size, ZX_Token.rem, ':/A:', 13,80
.Size EQU $-C_DISK_C6-1
;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,41 @@
Sprites:
; <20>  ¢å®¤¥ ¢ IX  ¤à¥á â ¡«¨æë á ¢ë¢®¤¨¬ë¬¨ á¯à ©â ¬¨
IN A,(SLOT1)
LD H,A
IN A,(PORT_Y)
LD L,A
PUSH HL
LD A,#58
OUT (SLOT1),A
; ld ix,SP_Table
ld b,(ix+0)
inc ix
.loop:
push bc
LD A,(ix+str_EasterSprites.SpHeight) ; !!!!! ª®®à¤¨­ â  ª à⨭ª¨ ¯® Y + ¢ëá®â  ª à⨭ª¨
ld l,(ix+str_EasterSprites.SpAddress)
ld h,(ix+str_EasterSprites.SpAddress+1)
.putSprite:
DEC A
OUT (PORT_Y),A
LD E,(ix+str_EasterSprites.SpXCoord) ; !HARDCODE ª®®à¤¨­ â  ª à⨭ª¨ ¯® •
LD D,(ix+str_EasterSprites.SpXCoord+1)
LD C,(ix+str_EasterSprites.SpWidth) ; !HARDCODE ¤«¨­  £®à¨§®­â «ì­®© «¨­¨¨ ª à⨭ª¨
LD B,(ix+str_EasterSprites.SpWidth+1)
LDIR
CP (IX+str_EasterSprites.SpYCoord)
JP NZ,.putSprite
ld c,str_EasterSprites
add ix,bc
pop bc
djnz .loop
POP BC
LD A,B
OUT (SLOT1),A
LD A,C
OUT (PORT_Y),A
XOR A
RET

View File

@ -0,0 +1,157 @@
;------------------------------------------------------------------------------
;hl=src de=dst
lz4decrunch:
ld bc,7
add hl,bc
ld c,(hl)
inc hl
ld b,(hl) ;„q„u„„v„} „t„r„p „q„p„z„„„p „y„x „x„p„s„€„|„€„r„{„p - „„p„x„}„u„
inc hl
inc hl
inc hl ;„~„p„‰„p„|„€ „ƒ„w„p„„„<E2809E>„‡ „t„p„~„~„<>„‡ „ƒ„€ „ƒ„}„u„„u„~„y„ #0B
ld a,l
add a,c
ld (.endL+1),a
ld a,h
adc a,b
ld (.endH+1),a ;„K„€„~„u„‰„~„<>„z „p„t„„u„ƒ „ƒ„w„p„„„<E2809E>„‡ „t„p„~„~„<>„‡
.loop:
ld a,(hl)
inc hl
ld (.litteral+1),a
and #F0
jr z,.copy ;„E„ƒ„|„y „t„|„y„~„p „„p„r„~„p 0, „ƒ„{„€„<E282AC>„y„„€„r„p„„„Ž „…„w„u „<>„u„„u„t„p„~„~„<>„u „t„p„~„~„<>„u
rrca
rrca
rrca
rrca
ld b,0
ld c,a
cp #0F
call z,.getlength ;„E„ƒ„|„y „t„|„y„~„p #0F, „„„€ „<>„€„|„…„‰„y„„„Ž „t„€„<E282AC>„€„|„~„y„„„u„|„Ž„~„…„<E280A6> „t„|„y„~„…
ldir ;„P„u„„u„t„p„‰„p „~„p„‰„y„~„p„u„„„ƒ„ „ƒ„€ „ƒ„|„u„t„…„<E280A6>„u„z „y„~„†„€„‚„}„p„ˆ„y„y „€ „t„|„y„~„u
.copy:
ld a,l ;„t„€„ƒ„„„y„s„|„y „|„y „ƒ„w„p„„„<E2809E>„u „t„p„~„~„<>„u „{„€„~„u„‰„~„€„s„€ „p„t„„u„ƒ„p
.endL:
sub #FF
ld a,h
.endH:
sbc a,#FF
ret nc ;„^„†„†„u„{„„„y„r„~„p„<>„€„r„u„„{„p zf=1
ld c,(hl)
inc hl
ld b,(hl) ;bc=2byte „X„„„u„~„y„u „x„~„p„‰„u„~„y„ „ƒ„}„u„„u„~„y„
inc hl
.litteral:
ld a,0 ;litteral „<>„u„„u„<75>„y„ƒ„p„„„Ž „x„t„u„ƒ„Ž
and #0F
add a,#04 ;cf=0
push hl
ld h,d
ld l,e
sbc hl,bc ;hl=de-bc „I„ƒ„<C692>„€„|„Ž„x„…„z„„„u „t„p„~„~„<>„u, „{„€„„„€„<E2809A>„u „…„w„u „q„<71>„|„y „„p„ƒ„Š„y„„u„~„<>, „r „{„p„‰„u„ƒ„„„r„u „y„ƒ„„„€„‰„~„y„{„p „<>„u„„u„t„p„‰„y
ld b,0
ld c,a
cp #0F+#04
ex (sp),hl
call z,.getlength
ex (sp),hl
ldir ;„K„€„<E282AC>„y„„€„r„p„„„Ž „<>„u„„u„~„€„ƒ „…„w„u „„p„x„r„u„„~„…„„„<E2809E>„‡ „t„p„~„~„<>„‡
pop hl
jp .loop
.getlength: ;„P„€„|„…„‰„y„„„Ž „t„|„y„~„… „q„p„z„„„p „<>„u„„u„r„€„t„p („q„€„|„ބЄu) bc=„„„u„{„…„„p„ „ƒ„…„}„}„p „<>„u„„u„r„€„t„p
ld a,(hl)
inc hl
cp #FF ;#FF „…„t„r„p„y„r„p„u„„„ƒ„ „{„p„{ „x„~„p„{, „x„p „{„€„„„€„<E2809A>„} „ƒ„|„u„t„…„u„„ „y„~„†„€„‚„}„p„ˆ„y„ „€ „t„|„y„~„u
jr nz,.addlen
inc b
dec bc ;bc += 255
jr .getlength
.addlen:
add a,c
ld c,a
adc a,b
sub c
ld b,a ;bc=„t„|„y„~„p „<>„u„„u„t„p„r„p„u„}„€„s„€ „q„p„z„„„p
ret
;------------------------------------------------------------------------------
;in: hl=„~„p„‰„p„|„Ž„~„<>„z „p„t„„u„ƒ bc=„t„|„y„~„p
;out: bcde=„„u„x„…„|„Ž„„„p„„
crc32:
push hl
push bc
ld de,#FFFF ; 0xFFFFFFFF ? „~„p„‰„p„|„Ž„~„€„u „x„~„p„‰„u„~„y„u CRC32, „y„ƒ„<C692>„€„|„Ž„x„…„u„}„€„s„€ „r ZIP
ld h,d
ld l,e
ld c,#20 ;„ƒ„€„{„„p„„u„~„y„u
exx
pop hl
dec hl
inc h
inc l
ld b,l
ld c,h
pop hl
.loop1:
ld a,(hl)
inc hl
exx
xor e
ld b,8
.loop2:
srl h
rr l
rr d
rra
jp nc,.skip
ld e,a
ld a,h
xor #ED
ld h,a
ld a,l
xor #B8
ld l,a
ld a,d
xor #83
ld d,a
ld a,e
; xor #20
xor c
.skip:
djnz .loop2
ld e,a
exx
djnz .loop1
dec c
jp nz,.loop1
exx
ld a,h ;CRC32, „y„ƒ„<C692>„€„|„Ž„x„…„u„}„<>„z „r ZIP, „<>„y„~„y„}„p„u„„ xor „ƒ 0xFFFFFFFF „r „{„€„~„ˆ„u
cpl
ld b,a
ld a,l
cpl
ld c,a
ld a,d
cpl
ld d,a
ld a,e
cpl
ld e,a
ret

View File

@ -0,0 +1,89 @@
CALL #E1D2
DI
LD (RelocatedCode.SPsave),SP
LD HL,.START
LD DE,#D800
LD BC,.END-.START
PUSH DE
LDIR
LD HL,#E1D1
LD DE,#FFFF
LD BC,#0850
RET
RelocatedCode:
.START:
LDDR
LD HL,#F7B0
LD DE,#D900
LD B,#00
LD A,(HL)
BIT 7,A
JR NZ,#D94A
AND #0F
LD B,A
RLD
ADD A,#03
LD C,A
INC HL
LD A,E
SUB (HL)
INC HL
LD SP,HL
LD H,(HL)
LD L,A
LD A,D
SBC A,B
LD B,H
LD H,A
LD A,B
LD B,#00
LDIR
LD H,B
LD L,C
ADD HL,SP
JR #D929
AND #7F
JR Z,#D967
INC HL
BIT 6,A
JR NZ,#D958
LD C,A
LDIR
JR #D928
AND #3F
ADD A,#03
LD B,A
LD A,(HL)
INC HL
LD C,(HL)
LD (DE),A
INC DE
DJNZ #D960
LD A,C
JR #D929
LD SP,#D85B
LD B,#03
POP HL
DEC SP
POP AF
LD (HL),A
DJNZ #D96C
.SPsave+1: LD SP,#0000
DI
RET
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
.END EQU $
; Š à⨭ª  ­  áâ à⮢®¬ íªà ­¥ á«¥¢  ᢥàåã
INCBIN 'SP_LOGO.BIN'

View File

@ -0,0 +1,178 @@
;
MACRO ShowInfo text, in_disp
/*
DISPLAY ' '
DISPLAY '[*] ', text
IF in_disp
DISPLAY 'ROM:'
DISPLAY ' ORG: ',/H, $$$
DISPLAY ' PAGE: ',/H, $$$$
DISPLAY 'MEM:'
DISPLAY ' DISP: ',/H, $
DISPLAY ' PAGE: ',/H, $$
ELSE
DISPLAY 'ROM:'
DISPLAY ' ORG: ',/H, $
DISPLAY ' PAGE: ',/H, $$
ENDIF
DISPLAY '[X]'
DISPLAY ' '
*/
ENDM
;
;
; ‚室: è¨à¨­  á¯à ©â , ¢ëá®â , ª®®à¤¨­ â  X, ª®®à¤¨­ â  Y,  ¤à¥á á¯à ©â  ¢ ¯ ¬ïâ¨
MACRO EasterTable width, height, Xcoord, Ycoord, addr
WORD addr ;  ¤à¥á á¯à ©â  ¢ ¯ ¬ïâ¨
WORD width ; ˜¨à¨­ 
BYTE height+Ycoord ; ‚ëá®â  + Y coord
WORD Xcoord+#4040 ; X coord ; !HARDCODE ¨á¯à ¢¨âì ­  ¬¥âªã #4040 -  ¤à¥á «®£®
BYTE Ycoord ; Y coord
ENDM
;
;
MACRO _mRECOVERYrdChooseTYPE vers
IF vers = 1
; ¥á«¨ RECOVERY ­¥ ¯®¤à §ã¬¥¢ ¥â 90% ¡¥§®¯ á­®áâì ¯®«ì§®¢ â¥«ì᪨å à ¬¤¨áª®¢
; â® ¢ë¡¨à ¥¬ íâ®â ¢ à¨ ­â, ®­ èãáâ॥, ¯®¤ RECOVERY ¢á¥£¤  ¢ë¡¨à ¥âáï RAM Disk 15
;
ELSEIF vers = 2
; ˆé¥¬ ᢮¡®¤­ë© à ¬¤¨áª
LD B,SYS_PAGE.RAMD_KEYS.NUM
.getRDidLoop: LD A,B
DEC A
LD (RECOVERYstart.RDkey),A
PUSH BC
LD B,ROM_DISK.Pages.Size
CALL EMM.GetMemRMD
POP BC
JR NC,RECOVERYstart.IMGread ; ᢮¡®¤­ë© à ¬¤¨áª ­ ©¤¥­, ¢ë室¨¬ ¨§ 横« 
DEC A
JR Z,RECOVERYstart.FreeMem ; ®è¨¡ª  - ­¥¤®áâ â®ç­® ¯ ¬ïâ¨, ¢ë§ë¢ ¥¬ ®ç¨áâªã ¯ ¬ïâ¨
DJNZ .getRDidLoop
;
ELSE
ASSERT 0, Invalid 'RECOVERYrdChooseTYPE' variant - RECOVERYrdChooseTYPE
ENDIF
ENDM
;
MACRO _mRECOVERYmountTYPE vers
IF vers = 1 ; <20>®«¥¥ ¡ëáâàë©, ­® § å à¤ª®¦¥­­ë© ¢ à¨ ­â
LD HL,TEMP
CALL EMM.GetMemBlkPages ; ª¨¤ ¥¬ ¢ ¡ãä¥à ­®¬¥à  áâà ­¨æ RAM disk
IN A,(SLOT3)
LD (.slot3save),A
LD HL,ROM_DISK.Pages.Number
LD B,0
LD C,(HL)
INC C
LD DE,TEMP+ROM_DISK.Pages.Size
LDIR ; ª¨¤ ¥¬ ¤ «ìè¥ ¢ ¡ãä¥à ­®¬¥à  áâà ­¨æ ROM disk
LD IY,TEMP+ROM_DISK.Pages.Size ; ROM_DISK.Pages.Number
LD IX,TEMP
LD B,(IY+0)
LD A,R
PUSH AF
DI
.loopIMGtoRAM: PUSH BC
INC IY
LD A,(IY+0)
OUT (ROM.SLOT0),A
LD A,(IX+0)
OUT (SLOT3),A
INC IX
LD HL,0
LD DE,#C000
LD BC,#4000
LDIR
POP BC
DJNZ .loopIMGtoRAM
.slot3save+*: LD A,0
OUT (SLOT3),A
XOR A
OUT (ROM.SLOT0),A
OUT (SYS_PORT.ROM),A
POP AF
JP PO,.noInterrupts
EI
.noInterrupts:
;
ELSEIF vers = 2 ; ¬¥­¥¥ ¡ëáâàë©, ­® ¡®«¥¥ ¯à ¢¨«ì­ë© ¢ à¨ ­â ç¥à¥§ ä㭪樨 ¡¨®á 
LD (.ramdskID),A
LD DE,0 ; ­®¬¥à ᥪâ®à 
LD B,(ROM_DISK.Pages.Size * #4000)/512 ; áçñâ稪 - ª®«-¢  ᥪâ®à®¢ ¯® 512 ª¡
.loop:
;read rom disk
PUSH BC
LD A,1 ;à §¬¥à ᥪâ®à  256
EX AF,AF'
LD A,#46 ;ç⥭¨¥ ¨§ ROM-Disk
EX AF,AF'
LD HL,TEMP ; ¤à¥á ¡ãä¥à  ¤ ­­ëå
LD B,2 ;ç¨á«® ᥪâ®à®¢
CALL BLK_RD_WR
;write to ram disk
PUSH DE ;­®¬¥à ᥪâ®à 
DEC DE
DEC DE
.ramdskID+*: LD A,0 ;¨¤¥­â¨ä¨ª â®à ¡«®ª 
EX AF,AF'
LD A,#FF ;§ ¯¨áì ¢ RAM-Disk
EX AF,AF'
LD HL,TEMP ; ¤à¥á ¡ãä¥à  ¤ ­­ëå
LD B,2 ;ç¨á«® ᥪâ®à®¢
CALL BLK_RD_WR
POP DE ;­®¬¥à ᥪâ®à 
POP BC
DJNZ .loop
;
ELSE
ASSERT 0, Invalid 'RECOVERYmountTYPE' variant - RECOVERYmountTYPE
ENDIF
ENDM
;
;
MACRO RST_to_BIOS
IF (IsInBIOS = 0) && ($ < #4000)
CALL ToBIOS_FromEXT
ELSE
RST ToBIOS_18
ENDIF
ENDM
;
;
MACRO JP_to_BIOS
IF (IsInBIOS = 0) && ($ < #4000)
JP ToBIOS_FromEXT
ELSE
JP ToBIOS_18
ENDIF
ENDM
;
;
; MACRO
; ENDM
;

View File

@ -0,0 +1,25 @@
;=======================[All shared EQUs]=======================;
BETA_BUILD EQU 6 ; ¤®¡ ¢«ï¥â áâப㠨 á®®¡é¥­¨¥ ® â¥á⮢®© ᡮથ ­  áâ à⮢®¬ íªà ­¥
;======================[All shared defines]=====================;
DEFINE PACKED_MAIN 0 ; ¯ ª®¢ âì MAIN ¨«¨ ¢«¥§ ¥â ¡¥§ í⮣®?
DEFINE SP2000_Loader_Flag #0107 ;
DEFINE IDE_Optimization 1 ; á«¥£ª  ®¯â¨¬¨§¨àã¥â ­¥ª®â®àë¥ ¯à®æ¥¤ãàë à ¡®âë á HDD
DEFINE NeedSafePort_Y 1 ; ¥á«¨ 0, â® ¢ ०¨¬¥ ¡¥§  ªá¥«ï ­¥ª®â®àë¥ ¯à®æ¥¤ãàë ¬®£ãâ § áà âì íªà ­
DEFINE Pashalki 0 ;
DEFINE PICTURE_FILE './src/bios/logo/psfathers.bmp' ;
DEFINE StandartCGApallete 1 ; <20>®¤ª«îç âì ¯ «¨âàã ¨§ standart_colors.inc
DEFINE BitStream_SizeInPages 4 ;
DEFINE USE_E1_SCANCODE 0 ;
;----[ ‡ ¤¥à¦ª  ¢ ª ¤à å ¯®á«¥ ®âà¨á®¢ª¨ «®£®â¨¯  (0 = 256) ]---;
DEFINE LOGO_DELAY_MIN 25 ;
DEFINE LOGO_DELAY_NORM 100 ;
DEFINE LOGO_DELAY_MAX 130 ;
;----------------------------[ TEST ]---------------------------;
DEFINE TEST_INT 1 ; ’¥áâ®¢ë© ®¡à ¡®â稪 ¯®«ì§®¢ â¥«ì᪮£® INT
DEFINE NEW_FEATURE 0 ; !TODO ¯ã­ªâë ¢ á¥â ¯
DEFINE HDDwriteProtect 0 ; áâ à ï ä¨èª  ¤«ï ä㭪権 5x
DEFINE RECOVERYmountTYPE 1 ; 1 - ¡ëáâàë© ­¥¬­®£® § å à¤ª®¦¥­ë© ¢ à¨ ­â. 2 - ¡®«¥¥ "¯à ¢¨«ì­ë©"
DEFINE RECOVERYrdChooseTYPE 1 ; 1 - RECOVERY £à㧨âáï ¢ ¤¨áª 15, 2 - ¨é¥âáï ᢮¡®¤­ë© à ¬¤¨áª, ¥á«¨ ­¥â, â® ¢ 15-ë©
DEFINE FDD_NormalCount 0 ; !TODO
DEFINE UnusedSettingsFeatures 0 ;
;===============================================================;

BIN
Crazy BIOS/shared/RECOVERY.IMG Executable file

Binary file not shown.

View File

@ -0,0 +1,42 @@
;============[For EXP part]=============
;------[Version of BIOS "VER.MOD"]------
EXP_ID:
.VER EQU 3 ; <EFBFBD>®¬¥à ¢¥àᨨ ¬¥­ïâì âãâ!
.MOD EQU 06 ; <EFBFBD>®¬¥à ¢¥àᨨ ¬¥­ïâì âãâ!
BIOS_ver_hex EQU EXP_ID.VER*256+EXP_ID.MOD
DEFINE BIOS_ver_string '0'+EXP_ID.VER, '.', '0'+EXP_ID.MOD/10, '0'+EXP_ID.MOD-(EXP_ID.MOD/10)*10
IF BETA_BUILD > 0
DEFINE BETA_str_ver "BETA ","0"+BETA_BUILD
ENDIF
;---------------------------------------
DEFINE BoardID_start #5283
DEFINE BoardID_end #47E8
DEFINE MotherBoardID #0000
DEFINE MotherBoardType #00 ; !TODO 0 - Legacy, 1 - DX, 2 - Max
;=======================================
;============[For ROM part]============= ;!FIXIT ¢ë ­¥ ¯®­¨¬ ¥â¥, íâ® ¤à㣮¥))
;-[Version of disk subsystem "VER.MOD"]-
ROM_ID:
.VER EQU 2 ; <EFBFBD>®¬¥à ¢¥àᨨ ¬¥­ïâì âãâ!
.MOD EQU 55 ; <EFBFBD>®¬¥à ¢¥àᨨ ¬¥­ïâì âãâ!
Disk_subsystem_ver_hex EQU ROM_ID.VER*256+ROM_ID.MOD
DEFINE Disk_subsystem_ver_txt '0'+ROM_ID.VER, '.', '0'+ROM_ID.MOD/10, '0'+ROM_ID.MOD-(ROM_ID.MOD/10)*10
;---------------------------------------
;============[For CNF part]=============
CNF_ID:
.VER EQU 3 ; <EFBFBD>®¬¥à ¢¥àᨨ ¬¥­ïâì âãâ!
.MOD EQU 05 ; <EFBFBD>®¬¥à ¢¥àᨨ ¬¥­ïâì âãâ!
bitstream_ver_hex EQU CNF_ID.VER*256+CNF_ID.MOD
DEFINE bitstream_ver_string '0'+CNF_ID.VER, '.', '0'+CNF_ID.MOD/10, '0'+CNF_ID.MOD-(CNF_ID.MOD/10)*10
;---------------------------------------
;=======================================
DEFINE SPTeam_year '2024'
DEFINE SetupVer '1.60'
;---------------------------------------

View File

@ -0,0 +1,19 @@
;
;---------[All shared includes]---------
INCLUDE 'src/bios/shared/DEFINES.INC' ; Shared defines
IF Pashalki
INCLUDE 'Shared_Includes/structures/EasterSprites.inc'
ENDIF
INCLUDE 'Shared_Includes/structures/FileSystem.inc'
INCLUDE 'src/bios/Loader/Loader.asm' ; Bitstream loader as macros
INCLUDE 'src/bios/shared/CompMacro.asm' ; ¬ ªà®áë
INCLUDE 'Shared_Includes/constants/SP2000.inc' ; ª®­áâ ­âë
INCLUDE 'Shared_Includes/constants/zx_char_codes.inc' ; ª®­áâ ­âë
INCLUDE 'Shared_Includes/constants/zx_vars.inc' ;
INCLUDE 'Shared_Includes/macroses/macros.z80'
INCLUDE 'src/bios/ROM/MEM_MAP.inc' ; ª àâ  ¯ ¬ïâ¨
INCLUDE 'src/bios/shared/VERSION.inc' ; ‚¥àá¨ï EXP ¨ ROM
INCLUDE 'Shared_Includes/constants/BIOS_EQU.inc'
INCLUDE 'src/bios/ROM/BIOS.inc'
;---------------------------------------
;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,9 @@
<EFBFBD>ணࠬ¬  § ¯¨á¨ ­  FDD/HDD boot-§ £àã§ç¨ª  ¨ ä ©«®¢ á¨á⥬ë.
”¨âç¨ ¯à®£à ¬¬ë:
- ®â«¨ç¨¥ ®â ®à¨£¨­ «ì­®£® boot-¨­áâ ««ïâ®à , íâ  ¬®¦¥â
¯¥à¥¯¨á뢠âì 㦥 ãáâ ­®¢«¥­­ë© boot-§ £àã§ç¨ª.
- ” ©«ë á¨á⥬ë (system.dos, system.exe) ¬®£ãâ ¨¬¥âì
«î¡ë¥ à §¬¥àë.
- <20>ਠ§ £à㧪¥ ª®¬¯ìîâ¥à  á ¤¨áª¥âë, § ¯à è¨¢ ¥âáï ­®¢ ï
¤¨áª¥â  ¤«ï á®§¤ ­¨ï ¨§ ­¥¥ § £à㧮筮©.

View File

@ -0,0 +1,914 @@
////////////////////////////////////////////////////////////////////////
; CHANGELOG
; [x] - § £à㧪  á «î¡®£® primary active à §¤¥« 
; [x] - ¯®¤¤¥à¦ª  § £à㧪¨ á FAT32 à §¤¥« 
; [x] - § £à㧪  á RAM ¤¨áª 
; [x] - bug fixes and optimizations)))
////////////////////////////////////////////////////////////////////////
; <20>ணࠬ¬  § ¯¨á¨ ­  FDD/HDD boot-§ £àã§ç¨ª  ¨ ä ©«®¢ á¨á⥬ë.
;
; ‡ £à㦠¥â á¨áâ. ä ©«ë ¨§ ª®à­ï ¤¨áª , á ª®â®à®£® ¡ë« 
; § £à㦥­  á¨á⥬ .
; ”¨âç¨ ¯à®£à ¬¬ë:
; ®â«¨ç¨¥ ®â ®à¨£¨­ «ì­®£® boot-¨­áâ ««ïâ®à , íâ  ¬®¦¥â
; ¯¥à¥¯¨á뢠âì 㦥 ãáâ ­®¢«¥­­ë© boot-§ £àã§ç¨ª.
; ” ©«ë á¨á⥬ë (system.dos, system.exe) ¬®£ãâ ¨¬¥âì
; «î¡ë¥ à §¬¥àë.
; <20>ਠ§ £à㧪¥ ª®¬¯ìîâ¥à  á ¤¨áª¥âë, § ¯à è¨¢ ¥âáï ­®¢ ï
; ¤¨áª¥â  ¤«ï á®§¤ ­¨ï ¨§ ­¥¥ § £à㧮筮©.
;
;
STRUCT _sysFatBuffer
;.DRIVE: BYTE #FF
.FAT_TYPE: BYTE #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; fat32
.CacheBlock: WORD #0000
;.CacheUpdated: BYTE #00
;.SectorsPerBank: BYTE #00
.RootDirStartCluster_L: WORD #0000
.RootDirStartCluster_H: WORD #0000 ; fat32
.FAT1_SEC_L: WORD #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
.FAT1_SEC_H: WORD #0000 ; fat32
;.FAT2_SEC_L: WORD #0000
;.FAT2_SEC_H: WORD #0000 ; fat32
;.Number_Of_FATs BYTE #02
.SectorsPerFAT_L WORD #0000
.SectorsPerFAT_H BYTE #00
.RootDirFirstSector_L: WORD #0000 ; MSD_CAT_SEC first sector DIR
.RootDirFirstSector_H: WORD #0000 ; MSD_CAT_SEC first sector DIR
.DirSizeInSectors: BYTE #00 ; DIR_SEC_SIZE
.FirstDataSector_L: WORD #0000 ; MSD_DAT_SEC low
.FirstDataSector_H: WORD #0000 ; MSD_DAT_SEC high
.BytesPerCluster: WORD #0000 ; CLUSTER_LEN
;.END_CHAIN_CLUSTER_L: WORD #FFFF
;.END_CHAIN_CLUSTER_H: WORD #0FFF
;.MaxClusterLow: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
;.MaxClusterHigh: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
;.BytesPerSector: WORD #0000
.SectorsPerCluster: BYTE #00
;.FSINFO_Sector: WORD #01
;.BPB_SERIAL_NUMBER: DWORD #00000000
;.BPB_LABEL: BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
;.UPD_FSINFO: BYTE 0
;.FREE_CLUSTERS_COUNT_L: WORD #FFFF
;.FREE_CLUSTERS_COUNT_H: WORD #FFFF
;.FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
;.ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“)
;.READ_PG: BYTE #00 ;!TODO ­¥ ¨á¯®«ì§ãîâáï ­¥ª®â®àë¥ §­ ç¥­¨ï, ­® § ¤ã¬ª  ­¥¯«®å ï)))
;.S_X_H: DWORD #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  樫¨­¤à¥
ENDS
includelua 'Shared_includes/lua/Functions.lua'
include 'shared_includes/constants/sp2000.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 'shared_includes/structures/FileSystem.inc'
;include 'DSS/structures.inc'
include '../DSS/defines.inc'
LUA PASS1
local date, month, year = Get_date_RU(sj.get_define("__DATE__"))
BuildDate = "'" .. date .. "." .. month .. "." .. year .. "'"
sj.insert_define("SYS_BUILD_DATE", BuildDate)
ENDLUA
LUA ALLPASS
sj.insert_define("SYS_BUILD_DATE", BuildDate)
ENDLUA
DEFINE EXEinfoMACRO 0
DEFINE App_EXE_Version 1
MACRO _mEXEinfo
BLOCK 10,' ' ; ‚ëà ¢­¨¢ ­¨¥ ¤«ï ªà á¨¢®£® ®â®¡à ¦¥­¨ï ¢ HEX
BYTE ' Bootloader '
BYTE ' installer '
BYTE ' for DSS. '
BYTE ' Vasil Ivanov, '
BYTE ' Anatoliy '
BYTE ' Belyanskiy. '
BYTE ' Sprinter Team, '
BYTE ' 2024 '
ENDM
; ¢¥àá¨ï ¯à®£à ¬¬ë
major_version equ 2 ; áâ. ­®¬¥à ¢¥àᨨ
minor_version equ 1 ; ¬«. ­®¬¥à
;;
SECTORS_OF_LOADER EQU 4 ; ᥪâ®à®¢ § £àã§ç¨ª 
.IN_BPB EQU 1
.AFTER_BPB EQU 3
org_addr EQU #8000 + CLP_Buffer
code_addr EQU BEGIN
program_start EQU BEGIN
stack_point EQU #BFFE
Loader_length EQU 0
;
page_buffer equ #C000 ; ¡ãä¥à ä ©«®¢
;;
include 'Shared_Includes/constants/EXE_Header.z80'
ORG org_addr
BEGIN: ;di
in a,(SLOT3)
ld (port+1),a ; á®åà. ¯®àâ
push ix
call save_path ; á®åà. ⥪. ¤¨áª ¨ ¯ãâì
ld c,Dss.Version ; ã§­ âì ¢¥àá¨î „Ž‘
RST ToDSS
ex de,hl ; hl=⥪. ¢¥àá¨ï
ld de,#0146 ; 1.70.810 d=¢¥àá¨ï, e=¬®¤¨ä¨ª æ¨ï, bc - ­®¬¥à ᡮન. de = #0146, bc = 810 dos ver 1.70.810
and a
sbc hl,de
;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
;jr nc,version_ok
jr z,.check_build ; ¥á«¨ ­®¬¥à ¢¥àᨨ 1.70
jr nc,version_ok ; ¥á«¨ ­®¬¥à ¢¥àᨨ ¡®«ìè¥ 1.70
;
.old_ver: pop hl
ld a,11 ; ¨­¤¥ªá áâப¨ "Error: Need DSS version 1.70..."
call print_string
ld a,-1
jp exit
;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
.check_build: ld hl,810 ; 1.70.810 d=¢¥àá¨ï, e=¬®¤¨ä¨ª æ¨ï, bc - ­®¬¥à ᡮન. de = #0146, bc = 810 dos ver 1.70.810
sbc hl,bc
jr nc,BEGIN.old_ver
;
version_ok: xor a ; ¨­¤¥ªá áâப¨ â¨â« 
call print_string
pop hl ; ª®¬-áâப 
; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
call get_drive_letter
jp c,help ; ­¥â ¯ à ¬¥â஢
ld (disk),a ; § ¤ ­­ë© ­®¬¥à ¤¨áª 
; ã§­ âì ­®¬¥à boot-¤¨áª  á¨á⥬ë
ld bc,Dss.BootDSK.Get
RST ToDSS
ld (boot_disk),a ; ¤¨áª (A=0,B=1,..)
; ¯à®¢¥à¨âì ­  ᮢ¯ ¤¥­¨¥ ¤¨áª®¢
ld hl,disk
cp (hl)
jr nz,.next
ld hl,confirm_flag
ld (hl),1 ; ãáâ. ä« £
;
; —⥭¨¥ ¢ ¡ ­ª¨ ä ©«®¢ á¨á⥬ë
;
.next: ld a,(boot_disk) ; ¤¨áª § £à㧪¨ Ž‘
ld hl,root_path ; "X:\" ª®à¥­ì ¤¨áª 
add a,'A'
ld (hl),a
ld c,Dss.ChDir ; ᬥ­  ª â «®£ 
RST ToDSS
;--------------------------------------------
; —⥭¨¥ ä ©«  system.exe
;--------------------------------------------
ld hl,name2 ; ¨¬ï ä ©« 
call read_file ; ¢áï à ¡®â  ¯® § £à㧪¥ ä ©«  ¢ áâà ­¨æë
;jr nc,read_file1_ok
; ®á¢®¡. ¡«®ª ¯ ¬ïâ¨
;read_file_err: ld a,(FILE1_PARAMS.id_blck) ; ¨¤¥­â¨ä. ¡«®ª  ¯ ¬ïâ¨
; ld c,Dss.FreeMem
; RST ToDSS
;ld a,DSS_Error.sys.DISK_FULL ; ª®¤ ®è¨¡ª¨
jp c,exit
; á®åà. à ¡. ï祩ª¨ ä ©«  system.exe
read_file1_ok: ld hl,FILE1_PARAMS ; ®âªã¤ 
ld de,FILE2_PARAMS ; ªã¤ 
ld bc,FILE2_PARAMS.dataSize
ldir
;--------------------------------------------
; —⥭¨¥ ä ©«  system.dos
;--------------------------------------------
ld hl,name1 ; ¨¬ï ä ©« 
call read_file ; ¢áï à ¡®â  ¯® § £à㧪¥ ä ©«  ¢ áâà ­¨æë
;jr c,read_file_err
;ld a,DSS_Error.sys.DISK_FULL; ª®¤ ®è¨¡ª¨
jp c,exit
;jr nc,read_file2_ok
; ®á¢®¡. ¡«®ª ¯ ¬ï⨠system.exe
; file_err1: ld a,(FILE2_PARAMS.id_blck); ¨¤¥­â¨ä. ¡«®ª  ¯ ¬ïâ¨
; ld c,Dss.FreeMem
; RST ToDSS
;jr read_file_err ; ®á¢®¡. ¡«®ª ¯ ¬ï⨠system.dos
confirm_flag+1: ld a,0
or a
jr z,no_confirm
ld a,(boot_disk) ; á¨áâ. ¤¨áª
cp 2
jr nc,no_confirm ; ­¥ ¤¨áª®¢®¤ë
; § ¯à®á¨âì æ¥«¥¢®© ¤¨áª
ld a,(disk) ; § ¤ ­­ë© ­®¬¥à ¤¨áª 
add a,'A'
ld (messages.lett2),a
ld a,5 ; ¨­¤¥ªá áâப¨ "Insert destination disk..."
call print_string
ld bc,Dss.K_CLEAR + Dss.WaitKey*256; ¦¤¥¬ ­ ¦ â¨ï ª« ¢¨è¨
RST ToDSS
no_confirm: ld a,2 ; ¨­¤¥ªá áâப¨ "Installing boot loader..."
call print_string
; “áâ. 楫¥¢®© ¤¨áª/¯ãâì
ld a,(disk) ; 楫¥¢®© ¤¨áª
ld hl,root_path ; "X:\" áâப  ¯ãâ¨
add a,'A'
ld (hl),a
ld c,Dss.ChDir ; ᬥ­  ⥪. ª â «®£ 
RST ToDSS
;--------------------------------------------
; ‡ ¯¨á âì boot-§ £àã§ç¨ª
call write_boot_loader
jr c,write_error ; ®è¨¡ª  à ¡®âë á ¤¥¢ ©á®¬
;
ld a,3 ; ¨­¤¥ªá áâப¨ "Writing system files..."
call print_string
; ‡ ¯¨áì ä ©«  system.dos
ld hl,name1 ; ¨¬ï ä ©« 
call write_file
jr c,write_error
ok_write1: ; ®á¢®¡®¤¨âì ¯ ¬ïâì
; ld a,(FILE1_PARAMS.id_blck) ; ¡«®ª system.dos
; ld c,Dss.FreeMem
; RST ToDSS
;
; § £à. à ¡. ï祩ª¨
ld hl,FILE2_PARAMS ; ®âªã¤ 
ld de,FILE1_PARAMS ; ªã¤ 
ld bc,FILE1_PARAMS.dataSize
ldir
; ‡ ¯¨áì ä ©«  system.exe
ld hl,name2 ; ¨¬ï ä ©« 
call write_file
; ®á¢®¡®¤¨âì ¯ ¬ïâì
; push af
; ld a,(FILE1_PARAMS.id_blck) ; ¡«®ª system.exe
; ld c,Dss.FreeMem
; RST ToDSS
; pop af
;
jr c,write_error
;jr c,exit ; ®è¨¡ª 
;
ld a,(disk) ; § ¤ ­­ë© ­®¬¥à ¤¨áª 
add a,'A'
ld (messages.lett1),a
ld a,1 ; ¨­¤¥ªá áâப¨ "System installed on disk "
call print_string
ld a,(confirm_flag)
or a
jr z,exit
; § ¯à®á¨âì á¨á⥬­ë© ¤¨áª
ld a,(boot_disk) ; á¨áâ. ¤¨áª
cp 2
jr nc,.not_fdd ; ­¥ ¤¨áª®¢®¤ë
add a,'A'
ld (messages.lett3),a
ld a,6 ; ¨­¤¥ªá áâப¨ "Insert system disk..."
call print_string
ld bc,Dss.K_CLEAR + Dss.WaitKey*256; ¦¤¥¬ ­ ¦ â¨ï ª« ¢¨è¨
RST ToDSS
.not_fdd: xor a ; ª®¤ "Ok"
exit: push af
call restore_path ; ¢®ááâ. ⥪. ¤¨áª ¨ ¯ãâì
port: ld a,-1 ; á®åà. ¯®àâ
out (SLOT3),a
pop af
ld c,Dss.Exit ; ¢ë室 ¢ „Ž‘
ld b,a
RST ToDSS
jr $
;
help: ld a,8 ; ¨­¤¥ªá áâப¨ "Invalid drive specification"
call print_string
ld a,4 ; ¨­¤¥ªá áâப¨ åí«¯ 
err_mes: call print_string
ld a,1 ; ª®¤ ®è¨¡ª¨
jr exit
write_error: ld a,7 ; ¨­¤¥ªá áâப¨ "Can't install boot on this disk"
jr err_mes
root_path: db 'X:\',0 ; ¯ãâì
name1: db "SYSTEM.DOS",0
name2: db "SYSTEM.EXE",0
;-------------------------------------------------
; ‡ ¯¨á âì boot-§ £àã§ç¨ª ­  FDD/HDD
; ¢å®¤: ­¥â
; ¢ë室: CF - ®è¨¡ª  à ¡®âë á ¤¥¢ ©á®¬
;-------------------------------------------------
write_boot_loader:
ld a,(disk) ; § ¤ ­­ë© ­®¬¥à ¤¨áª 
ld c,Dss.DRV.Open ; open device
rst ToDSS.DRV
ret c
ld hl,close_device ; â®çª  ¢ë室 
push hl
ld a,(disk) ; § ¤ ­­ë© ­®¬¥à ¤¨áª 
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à 
ld ix,0 ; ¬«. à §àï¤
ld de,buffer ; ªã¤ 
ld bc,1*256 + Dss.DRV.Read ; ¯à®ç¨â âì 1 ᥪâ®à (boot)
rst ToDSS.DRV
ret c ; ®è¨¡ª  ç⥭¨ï
ld a,(buffer + _sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
cp #F0 ; 1.44Mb
ret c ; ­¥§­ ª®¬ë© ä®à¬ â
jr z,write_to_floppy
cp #F9 ; 720kB
jr z,write_to_floppy
cp #FA ; RAM disk
jr z,write_to_ram_disk
cp #F8 ; ¢¨­â
jp z,write_to_hard_disk
scf ; ­¥§­ ª®¬ë© ä®à¬ â
ret
; § ªàëâì ¤¥¢ ©á
close_device: push af ; á®åà. ä« £
ld a,(disk) ; § ¤ ­­ë© ­®¬¥à ¤¨áª 
ld c,Dss.DRV.Close ; close device
rst ToDSS.DRV
pop af
ret
;-------------------------------------------------
; ‡ ¯¨áì boot-§ £àã§ç¨ª  ­  ¤¨áª¥âã
;
; ¢å®¤: ¤ ­­ë¥ ¨§ buffer
; ¢ë室: CF - ¯à¨ ®è¨¡ª¥ § ¯¨á¨
;-------------------------------------------------
write_to_floppy:
ld a,(buffer + BOOT_SECTOR.Number_of_FATs) ; ç¨á«® ª®¯¨© FAT-®¢
or a
scf
ret z ; ®è¨¡ª 
dec a ; --ç¨á«® ª®¯¨©
jr z,overwrite_floppy ; § £àã§ç¨ª 㦥 § ¯¨á ­, ¯¥à¥§ ¯¨á âì ¥£®
; ­ áâநâì ï祩ª¨ boot-ᥪâ®à 
ld (buffer + BOOT_SECTOR.Number_of_FATs),a ; ç¨á«® ª®¯¨© FAT-®¢
ld hl,(buffer + BOOT_SECTOR.RESERVED_SECTORS) ; § à¥§¥à¢. ᥪâ®à®¢
ld bc,(buffer + BOOT_SECTOR.SectorsPerFAT16) ; ᥪâ®à®¢ ­  FAT
add hl,bc
ld (buffer + BOOT_SECTOR.RESERVED_SECTORS),hl ; § à¥§¥à¢. ᥪâ®à®¢
dec hl
ld de,SECTORS_OF_LOADER.AFTER_BPB
and a
sbc hl,de
ret c
overwrite_floppy:
; ¯¥à¥ª¨¤ë¢ ­¨¥ ç á⨠§ £àã§ç¨ª  ¢ 0 ᥪâ®à
LD HL,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.physical
LD DE,buffer + (_sBOOT_SECTOR.PARTITION_TABLE - DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size)
LD BC,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size
LDIR
;
; § ¯¨á âì boot-ᥪâ®à ­ § ¤
ld a,(disk) ; § ¤ ­­ë© ­®¬¥à ¤¨áª 
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à 
ld ix,0 ; ¬«. à §àï¤
ld de,buffer ; ®âªã¤ 
ld bc,1*256 + Dss.DRV.Write ; § ¯¨á âì 1 ᥪâ®à
rst ToDSS.DRV
ret c ; ®è¨¡ª  § ¯¨á¨
; § ¯¨á âì § £àã§ç¨ª
ld a,(disk) ; § ¤ ­­ë© ­®¬¥à ¤¨áª 
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à 
ld ix,1 ; ¬«. à §àï¤
ld de,code_loader ; ®âªã¤  (ª®¤ § £àã§ç¨ª )
ld bc,SECTORS_OF_LOADER.AFTER_BPB*256+Dss.DRV.Write; § ¯¨á âì 3 ᥪâ®à  (à §¬¥à § £à.)
rst ToDSS.DRV
ret
;-------------------------------------------------
; ‡ ¯¨áì boot-§ £àã§ç¨ª  ­  ¤à ©¢
;
; ¢å®¤: ­¥â
; ¢ë室: CF-®è¨¡ª  § ¯¨á¨
;-------------------------------------------------
write_to_ram_disk:
CALL write_no_BPB
RET C
; buffer = sector 0
;
JR write_to_BPB
write_to_hard_disk:
;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
CALL write_no_BPB
RET C
; buffer = sector 0
;
; ¯à®¢¥àª  ­  <20>€Œ-¤¨áª (à §¤¥«ë ­  à ¬¤¨áª¥ ¯®ª  ­¥ ¯®¤¤¥à¦¨¢ îâáï)
LD A,B
CP #80-1 ;!HARDCODE HDD number
JR C,write_to_BPB
;
PUSH BC
CALL Read_MBR
RET NZ
POP BC
PUSH BC
; set active in buffer
INC C
LD HL,buffer + _sBOOT_SECTOR.PARTITION_TABLE.Record_4
LD DE,_sMBR_PARTITION_RECORD ; à §¬¥à ®¤­®© § ¯¨á¨ MBR
LD B,_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD; MBR: Number of entries in the partition table
.loop: XOR A
LD (HL),A
;
LD A,C
CP B
JR NZ,.next
;
LD A,#80
LD (HL),A
PUSH HL
INC HL
INC HL
INC HL
INC HL
LD A,(HL)
POP HL
CP PartitionSysTypes.FAT12
JR Z,.next
CP PartitionSysTypes.FAT16_32Mb
JR Z,.next
CP PartitionSysTypes.FAT16
JR Z,.next
CP PartitionSysTypes.FAT16_LBA
JR Z,.next
CP PartitionSysTypes.FAT32
JR Z,.next
CP PartitionSysTypes.FAT32_LBA
JR Z,.next
; NOT SUPPORTED FS
POP BC
SCF
RET
;
.next: AND A
SBC HL,DE
DJNZ .loop
;
JR write_to_BPB.no_push
write_to_BPB: PUSH BC
; ¯¥à¥ª¨¤ë¢ ­¨¥ ç á⨠§ £àã§ç¨ª  ¢ 0 ᥪâ®à
.no_push: LD HL,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.physical
LD DE,buffer + (_sBOOT_SECTOR.PARTITION_TABLE - DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size)
LD BC,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size
LDIR
; § ¯¨áì ¢ 0 ᥪâ®à ªã᪠ § £àã§ç¨ª 
pop af ; § ¤ ­­ë© ­®¬¥à ¤¨áª 
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à 
ld ix,0 ; ¬«. à §àï¤
ld de,buffer ; ®âªã¤  (ª®¤ § £àã§ç¨ª )
ld bc,1*256 + BIOS.DRV_WRITE ; § ¯¨á âì 1 ᥪâ®à
RST ToBIOS
RET
;
;
write_no_BPB: ld a,(disk) ; ­®¬¥à § ¤ ­­®£® ¤¨áª 
ld de,Dss.DRV.GenIOCTL.Enter
ld bc,Dss.DRV.GenIOCTL.GetParams
rst ToDSS.DRV
ex af,af'
;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
ld b,a
inc c
scf
ret z
dec c
CP #80 ;!HARDCODE ⨯ ¤à ©¢  - HDD
JR NC,.skip_FAT_check
PUSH BC
; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
; A - PHISICAL DRIVE NUMBER
; [x] 02/02/2024 ¯à®¢¥àª  ­  ¢«¥§ ¥¬®áâì § £àã§ç¨ª  (ç⮡ ­¥ ¯®¯®àâ¨âì ä â)
CALL Read_MBR
RET NZ
POP BC
LD HL,(buffer + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS)
; ¬¨­¨¬ «ì­®¥ à ááâ®ï­¨¥ ­  ¤à ©¢¥ ®â ­ã«¥¢®£® ᥪâ®à  ¤® ä â  (¤«¨­  § £àã§ç¨ª  + 1)
LD DE,SECTORS_OF_LOADER.AFTER_BPB + 1
AND A
SBC HL,DE
RET C
;
.skip_FAT_check:;
push bc
ld a,b
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à 
ld ix,1 ; ¬«. à §àï¤
ld de,code_loader ; ®âªã¤  (ª®¤ § £àã§ç¨ª )
ld bc,SECTORS_OF_LOADER.AFTER_BPB*256+BIOS.DRV_WRITE; § ¯¨á âì 3 ᥪâ®à  (à §¬¥à § £à.)
rst ToBIOS
;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
pop bc
;
ret
; in: a - drive
; out CF = 1.
; ZF = 1 - OK,
; ZF = 0 - error
Read_MBR: LD HL,0
LD IX,0
LD DE,buffer
LD BC,1*256 + BIOS.DRV_READ
RST ToBIOS
LD HL,(buffer + _sBOOT_SECTOR.MBR_SIGNATURE)
LD DE,#AA55
AND A
SBC HL,DE
SCF
RET
;-------------------------------------------------
; ‚뤥«¨âì § ¤ ­­ë© ¤¨áª ¨§ ª®¬-áâப¨
;
; ¢å®¤: hl=¡ãä¥à áâப¨
; ¢ë室: a=­®¬¥à ¤¨áª 
; CF-¯à¨ ®è¨¡ª¥
;-------------------------------------------------
get_drive_letter:
inc hl ; ¡ãä¥à áâப¨
ld de,buffer ; ¡ãä¥à ¤«ï ¢ë¤¥«. ¯ à ¬¥âà 
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬. áâப¨
RST ToDSS
ld de,buffer
ld a,(de)
inc de
ld c,a ; á®åà. 'a'
ld a,(de)
inc de
cp ':'
jr nz,get_drive_err ; ¤¨áª ­¥ § ¤ ­
ld a,(de)
inc de
or a
jr nz,get_drive_err ; > 1 ¯ à ¬¥âà 
ld a,c ; ¢®ááâ. 'a'
cp 'A'
jr c,get_drive_err
cp 'z'+1
jr nc,get_drive_err
and %1101'1111
sub 'A'
or a
ret
;
get_drive_err: scf ; ®è¨¡ª 
ret
;----------------------------------------------------
; á®åà. ⥪. á¨á⥬­ë© ¤¨áª ¨ ¯ãâì
;----------------------------------------------------
save_path: ld c,Dss.CurDisk ; ã§­ âì ¤¨áª
RST ToDSS
ld (sys_disk),a
ld hl,sys_path
ld c,Dss.CurDir ; ã§­ âì ¯ãâì
RST ToDSS
ret
;----------------------------------------------------
; ¢®ááâ. ⥪. á¨á⥬­ë© ¤¨áª ¨ ¯ãâì
;----------------------------------------------------
restore_path: ld a,(sys_disk)
ld c,Dss.ChDisk ; ᬥ­  ¤¨áª 
RST ToDSS
ld hl,sys_path
ld c,Dss.ChDir ; ᬥ­  ¯ãâ¨
RST ToDSS
ret
;
;
disk: db 0 ; ­®¬¥à § ¤ ­­®£® ¤¨áª 
boot_disk: db 0 ; ­®¬¥à boot-¤¨áª  á¨á⥬ë
; à ¡. ï祩ª¨ ⥪. ä ©« 
;
; ç⥭¨¥: system.exe, ¤ «¥¥ system.dos
; § ¯¨áì: system.dos, ¤ «¥¥ system.exe
FILE1_PARAMS:
.handle: db -1 ; ¤¥áªà¨¯â®à ä ©« 
.id_blck: db -1 ; ¨¤¥­â¨ä. ¢ë¤¥«. ¡«®ª  ¯ ¬ïâ¨
;
.sizeLow: dw 0 ; ¬«.à §àï¤ à §¬¥à  ä ©« 
.sizeHigh: dw 0 ; áâ.à §àï¤
.dataSize EQU $-FILE1_PARAMS
; á®åà. ¤ ­­ë¥ system.exe
FILE2_PARAMS:
.handle: db -1 ; ¤¥áªà¨¯â®à ä ©« 
.id_blck: db -1 ; ¨¤¥­â¨ä. ¢ë¤¥«. ¡«®ª  ¯ ¬ïâ¨
;
.sizeLow: dw 0 ; ¬«.à §àï¤ à §¬¥à  ä ©« 
.sizeHigh: dw 0 ; áâ.à §àï¤
.dataSize EQU $-FILE2_PARAMS
ASSERT FILE1_PARAMS.dataSize = FILE2_PARAMS.dataSize, "Erorr! FILE1_PARAMS != FILE2_PARAMS"
;
;
;
;
;
; á®®¡é¥­¨ï
messages: db 0
db "\r\nBoot and System files Installer v" ;0
db major_version + '0','.'
db (minor_version / 10) + '0',(minor_version % 10) + '0','.'
db "\r\nBuild date ",SYS_BUILD_DATE
db "\r\nCopyright (c) 2006 Vasil Ivanov."
db "\r\nCopyright (c) 2023-2024 Sprinter Team."
db "\r\n\n",0
;
db "System successfully installed on disk " ;1
.lett1: db "X:\r\n\n",0
;
db "Installing boot loader...\r\n\n",0 ;2
db "Writing system files...\r\n\n",0 ;3
;
db "Syntax: SYS X:\r\n" ;4
db " where X: - drive letter (A..Z)\r\n\n",0
;
db "Insert destination disk in drive " ;5
.lett2: db "X:\r\n"
db "and strike any key when ready ...\r\n\n",0
;
db "Insert system disk in drive " ;6
.lett3: db "X:\r\n"
db "and strike any key when ready ...\r\n\n",0
;
db "Can't install boot on this disk\r\n\n",0 ;7
db "Invalid drive specification\r\n\n",0 ;8
db " Error: Can't open file\r\n\n",0 ;9
db " Error: Can't allocate memory\r\n\n",0 ;10
db " Error: Need DOS version 1.70.811 or higher\r\n\n",0 ;11
db " Error: Reading error\r\n\n",0 ;12
db " Error: Can't create file\r\n\n",0 ;13
db " Error: Writing error\r\n\n",0 ;14
.endmess: db 0
; ‚뢥á⨠áâப㠯® ¨­¤¥ªáã
; ¢å®¤: a=¨­¤¥ªá áâப¨
print_string: call get_string ; ¯®¨áª áâப¨ ¯® ¥¥ ¨­¤¥ªáã ¢ 'a'
ld c,Dss.PChars ; ¢ë¢®¤ áâப¨
RST ToDSS
ret
; ¯®¨áª áâப¨ ¯® ¥¥ ¨­¤¥ªáã ¢ 'a'
get_string: ld hl,messages ; ᯨ᮪ ¬¥áá £ ¤«ï ¨­¤¥ªá. ¤®áâ㯠
ld bc,messages.endmess - messages ; à §¬¥à ᯨ᪠
inc a
ex af,af'
xor a
ex af,af'
get_loop: ex af,af'
cpir
ret po
ret nz
ex af,af'
dec a
jr nz,get_loop
ret
;====================================================
; ‚áï à ¡®â  ¯® § £à㧪¥ ä ©«  ¢ áâà ­¨æë
; ¢å®¤: hl=¨¬ï ä ©« 
; ¢ë室: CF-¯à¨ ®è¨¡ª¥
;====================================================
read_file: ld a,Dss.Open.R ; ­  ç⥭¨¥
ld c,Dss.Open ; ®âªàëâì ä ©«
RST ToDSS
jr nc,.ok ; ¡¥§ ®è¨¡®ª
;
push af
ld a,9 ; ¨­¤¥ªá "Can't open file"
call print_string
pop af
ret
;
.ok: ld (FILE1_PARAMS.handle),a ; ¤¥áªà. ä ©« 
ld hl,0
ld ix,0
ld bc,Dss.Move_FP.FrEnd ; 㪠§ â¥«ì ­  ª®­¥æ ä ©« 
RST ToDSS
ld (FILE1_PARAMS.sizeHigh),hl ; áâ.à §àï¤ à §¬¥à  ä ©« 
ld (FILE1_PARAMS.sizeLow),ix ; ¬«.à §àï¤
call get_memory ; à áç. ¨ ¢ë¤¥«. áâà ­¨æë ¯®¤ ä ©«
jr c,.not_enough ; ­¥ 墠⠥⠯ ¬ïâ¨
call file_to_bank ; § £à. ä ©« ¢ áâà ­¨æë
.close_file: push af
ld a,(FILE1_PARAMS.handle) ; ¤¥áªà. ä ©« 
ld c,Dss.Close ; § ªàëâì ä ©«
RST ToDSS
pop af
ret
;
.not_enough: push af
call .close_file
ld a,10 ; ¨­¤¥ªá "Can't allocate memory"
call print_string
pop af
or a
scf
ret nz
ld a,DSS_Error.sys.NOT_ENOUGH_MEMORY
ret
;----------------------------------------------------
; <20>® à §¬¥àã ä ©«  à ááç¨â âì ­¥®¡å®¤¨¬®¥
; ç¨á«® áâà ­¨æ ¨ ¢ë¤¥«¨âì ¨å.
; ‚ë室: CF - ¯à¨ ­¥å¢ âª¥ ¯ ¬ïâ¨
;----------------------------------------------------
get_memory: ld hl,(FILE1_PARAMS.sizeHigh) ; áâ.à §àï¤ à §¬¥à  ä ©« 
ld bc,(FILE1_PARAMS.sizeLow) ; ¬«.à §àï¤
ld de,#4000 ; ¤¥«¨â¥«ì (à §¬¥à áâà ­¨æë)
xor a
scf
malloc1: rr d
rr e
jr c,malloc2
rr h
rr l
rr b
rr c
jr nc,malloc1
ld a,1
jr malloc1
;
malloc2: or a
jr z,$+3 ;!FIXIT $
inc bc
xor a
cp b
scf
ret nz
; ¢ë¤¥«¨âì ¡«®ª ¯ ¬ïâ¨
ld b,c ; b=ç¨á«® áâà ­¨æ
ld c,Dss.GetMem
RST ToDSS
ld (FILE1_PARAMS.id_blck),a ; ¨¤¥­â¨ä. ¡«®ª 
ret
;----------------------------------------------------
; ‡ £à㧨âì ä ©« ¢ áâà ­¨æë
;----------------------------------------------------
file_to_bank: ld hl,0
ld ix,0
ld a,(FILE1_PARAMS.handle) ; ¤¥áªà. ä ©« 
ld bc,Dss.Move_FP.FrStart ; 㪠§ â¥«ì ­  ­ ç «® ä ©« 
RST ToDSS
ld a,(FILE1_PARAMS.id_blck) ; ¨¤¥­â¨ä. ¡«®ª  ¯ ¬ïâ¨
;ld b,0 ; «®£. ­®¬¥à áâà ­¨æë ¢ ¡«®ª¥
ld bc,0*256 + BIOS.GetMemPage; ¯®«ãç¨âì 䨧. ­®¬¥à áâà ­¨æë ¢ ¡«®ª¥
rst ToBIOS
ret c
.loop: push af
out (SLOT3),a
ld hl,page_buffer ; #C000 ªã¤ 
ld de,#4000 ; ᪮«ìª®
ld a,(FILE1_PARAMS.handle) ; ¤¥áªà. ä ©« 
ld c,Dss.Read ; ç¨â âì ä ©«
RST ToDSS
pop bc
jr c,.error
; ok
cp -1 ; ¯à®ç¨â ­® ¬¥­ì襥 ç¨á«® ¡ ©â ?
ret z ; ¤ 
ld a,b ; a=䨧¨ç. áâà ­¨æ 
ld c,BIOS.GetMemPageNext ; ¯®«ãç¨âì ­®¬¥à á«¥¤. 䨧. áâà ­¨æë ¡«®ª 
rst ToBIOS
ret c
cp #FF
jr nz,.loop ; ­¥ ¯®á«¥¤­ïï áâà ­¨æ 
ret
; error
.error: ld a,12 ; ¨­¤¥ªá "Reading error"
call print_string
scf
ret
;====================================================
; ‡ ¯¨áì ä ©«  ­  ¤¨áª
; ¢å®¤: hl=¨¬ï ä ©« 
; ¢ë室: CF-¯à¨ ®è¨¡ª¥
;====================================================
write_file: ld a,FAT_ATTR.ARCHIVE ;  âਡãâ " à娢­ë©"
ld c,Dss.Create ; á®§¤ âì ä ©«
RST ToDSS
jr nc,.create_ok ; ¡¥§ ®è¨¡®ª
push af
ld a,13 ; ¨­¤¥ªá "Can't create file"
call print_string
pop af
ret
;
.create_ok: ld (FILE1_PARAMS.handle),a ; ¤¥áªà. ä ©« 
ld hl,read_file.close_file ; § ªà. ä ©«
push hl ; â®çª  ¢ë室 
;
; ç⥭¨¥ ä ©«  ¨§ ¡ ­®ª ¨ § ¯¨áì ­  ¤¨áª
ld a,(FILE1_PARAMS.id_blck); ¨¤¥­â¨ä. ¡«®ª  ¯ ¬ïâ¨
;ld b,0 ; «®£. ­®¬¥à áâà ­¨æë ¢ ¡«®ª¥
ld bc,BIOS.GetMemPage ; ¯®«ãç¨âì 䨧. ­®¬¥à áâà ­¨æë ¢ ¡«®ª¥
rst ToBIOS
ret c
.loop: push af
out (SLOT3),a
ld hl,(FILE1_PARAMS.sizeLow) ; ¬«.à §àï¤ à §¬¥à  ä ©« 
ld de,(FILE1_PARAMS.sizeHigh) ; áâ.à §àï¤
ld bc,#4000
xor a
sbc hl,bc
ld b,a
ex de,hl
sbc hl,bc
ex de,hl
jr c,.write_end ; § ¯¨á âì ®áâ â®ª
ld (FILE1_PARAMS.sizeLow),hl
ld (FILE1_PARAMS.sizeHigh),de
;
ld hl,page_buffer ; #C000 ®âªã¤ 
ld de,#4000 ; ᪮«ìª®
ld a,(FILE1_PARAMS.handle) ; ¤¥áªà. ä ©« 
ld c,Dss.Write ; § ¯¨áì ä ©« 
RST ToDSS
pop bc
jr c,.error
; write_ok
; [ ] Fixed 24/06/2024 ª ª®©-â® ¯¥à¥¦¨â®ª ¯à®è«®£®
;cp -1 ; § ¯¨á ­® ¬¥­ì襥 ç¨á«® ¡ ©â ?
;ld a,DSS_Error.sys.DISK_FULL
;scf
;jr nz,.error ; ¤ , ­  ¤¨áª¥ ­¥â ¬¥áâ 
;
ld a,b ; a=䨧¨ç. áâà ­¨æ 
ld c,BIOS.GetMemPageNext ; ¯®«ãç¨âì ­®¬¥à á«¥¤. 䨧. áâà ­¨æë ¡«®ª 
rst ToBIOS
ret c
cp #FF
jr nz,.loop ; ­¥ ¯®á«¥¤­ïï áâà ­¨æ 
ret
;
.write_end: pop af ; ¡ « ­á á⥪ 
ld de,(FILE1_PARAMS.sizeLow) ; ᪮«ìª®
ld a,e
or d
ret z ; 0 ¡ ©â®¢
ld hl,page_buffer ; #C000 ®âªã¤ 
ld a,(FILE1_PARAMS.handle) ; ¤¥áªà. ä ©« 
ld c,Dss.Write ; § ¯¨áì ä ©« 
RST ToDSS
ret nc
;
.error: push af
ld a,14 ; ¨­¤¥ªá "Writing error"
call print_string
pop af
ret
; „Ž‘-§ £àã§ç¨ª
code_loader: include 'dssboot.asm' ; ã­¨¢¥àá «ì­ë© § £àã§ç¨ª ¤«ï áâ à®£® ¨ ­®¢®£® ¤®á 
code_loader.size EQU $-code_loader
ASSERT SECTORS_OF_LOADER*512 >= (code_loader.size), "incorrect value of the SECTORS_OF_LOADER variable"
DISPLAY " dssboot size: ", /D,code_loader.size, " bytes. Sectors: ",/D,(code_loader.size/512 + (code_loader.size mod 512)/(code_loader.size mod 512))
; 512 ¡ ©â, ¡ãä¥à boot-ᥪâ®à 
buffer equ $
sys_disk equ buffer+512 ; ¤¨áª á¨á⥬ë
sys_path equ sys_disk+1 ; ¯ãâì á¨á⥬ë

195
Crazy Estex DSS/DSS/API.asm Normal file
View File

@ -0,0 +1,195 @@
;[BEGIN]
;//MODULE: DOS_X
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
;//UPDATE: 24-10-1999 DNS Restore module
;---------------------------------------------------------------
;Rev Date Name Description
;---------------------------------------------------------------
;R011 17-04-2023 BAO ‚६¥­­ë© ª®áâë«ì ¤«ï ­¥¤®¯ã᪠­¨ï ¯¥à¥¯®«­¥­¨ï ¡ãä¥à  ¯ã⨠ª â «®£ 
;R010 15-04-2023 BAO FIXED BUG WITH CHANGE DISK WITHOUT CHANGE PATH
;R009 13-04-2023 BAO FIX BUG WITH PARSING DIRECTORY BUFFER
;R13 06-04-2023 BAO ”ã­ªæ¨î SETBOOT ¬®¦­® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४⭮)
;R12 03-04-2023 BAO „®¡ ¢«¥­  äã­ªæ¨ï à¥áª ­  ¤à ©¢®¢ LD C,8 : RST #10
;R008 - 15-04-2003 DNS SAVE AND RESTORE CUR-PATH MACROS
;R11 - 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
;R10 - 03-04-2003 DNS IMPROVED FN. VERSION
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
;R007 06-02-2003 DNS FIX BUG IN MASK ROUTINE, IT ALLOW NAMES WHICH BEGAN FROM "." ".NAM"
;R006 29-01-2003 DNS FIX BUG WITH SET FILE DATE AND TIME
;R005 26-11-2002 DNS FIX ERROR IN CHDIR, DON'T ALLOWED "." FOR ROOT
;R004 19-11-2002 DNS DON'T ALLOW DIR & LABEL ATTR FOR FILES
;R003 19-11-2002 DNS ADD RESET OF VOLUME LABEL ATTRIBUT
;R002 19-11-2002 DNS FIX GET/SET ATTRIBUTES
;R001 16-12-1999 DNS Y2K fix
;R06 21-11-1999 DNS FN. DISKINF SUPPORT ALL DISKS
;R05 21-11-1999 DNS BUG FIX SIGNATURE #55AA IN BOOT SECTOR
;R04 08-11-1999 DNS KILL OLD FUNCTIONS
;R03 23-11-1998 DNS BUG FIX (IX+28) -> (IY+28)
;R02 21-11-1998 DNS CHANGE FUNCTION "MAKE FAT"
;R01 20-11-1998 DNS REPAIR FUNCTION "SAVE"
;
;---------------------------------------------------------------
include 'API/Version.asm'
include 'API/bootDsk.asm'
include 'API/curDisk.asm'
include 'API/diskINF.asm'
include 'API/ScanDRV.asm'
include 'API/Attribute.asm'
include 'API/Create.asm'
include 'API/Delete.asm'
include 'API/Rename.asm'
include 'API/Open.asm'
include 'API/Close.asm'
include 'API/Find.asm'
include 'API/ChnDisk.asm'
include 'API/CurrDir.asm'
include 'API/Time.asm'
include 'API/GetDateTime.asm'
include 'API/SetDateTime.asm'
include 'API/ChDir.asm'
include 'API/MkDir.asm'
include 'API/RmDir.asm'
include 'API/DosName.asm'
include 'API/Read.asm'
include 'API/Write.asm'
include 'API/FreeMem.asm'
include 'API/GetMem.asm'
include 'API/RetMem.asm'
include 'API/SetMem.asm'
include 'API/SetWin.asm'
include 'API/AppInfo.asm'
include 'API/Ex_Path.asm'
include 'API/GSwitch.asm'
include 'API/Environ.ASM'
include 'API/Lib_Sub.asm'
include "API/EXECUTE.ASM"
include "API/Print.asm"
;R09
;„ã¡«ì - CHNDISK = OPENDSK
;CHNDISK:
; PUSH AF
; LD C,Dss.DRV.Open
; RST ToDSS.DRV
; POP BC
; JP C,NDISK11
; LD A,B
; LD (CORE_BUFFERS.FatBuffer.DRIVE),A
; CALL RD_BPB
; RET C
; LD A,(LDRIVE)
; AND A
; RET
;NDISK11:
; CP DSS_Error.sys.INVALID_DRIVE
; SCF
; RET Z
; LD A,DSS_Error.sys.NOT_READY
; RET
;
;R04
;SIZE2CL: LD DE,(B_P_C)
; XOR A
; SCF
;S2C01: RR D
; RR E
; JR C,S2C02
; RR H
; RR L
; RR B
; RR C
; JP NC,S2C01
; LD A,1
; JP S2C01
;S2C02: OR A
; RET Z
; INC BC
; RET
;L_SEC_X: DW 0
;H_SEC_X: DW 0
;
;GOD EQU 1999-1980*512
;FHAND DB " "
; DB " "
; DB #20
; DW 0,0,0,0,0
; DW #0000
; DW 5*32+19+GOD
;SAVEC DW #0000
;SIZEC DW #0000,#0000
;=============================================
;//MODULE: DOS_X
;[END]
;R11
; IF SAVE_PATH_MACRO
; SAVE_CUR_PATH
; PUSH IX
; PUSH IY
; PUSH HL
; PUSH DE
; PUSH BC
; PUSH AF
;
; SET_PAGE_X ENVPAGE
; PUSH AF
;
; CALL CURRDSK
; ADD A,"A"
; LD HL,TMP_CURDIR_AUTO
; LD (HL),A
; INC HL
; LD A,":"
; LD (HL),A
; INC HL
; CALL CURRDIR_FN
;
; POP AF
; OUT (SLOT3),A
;
; POP AF
; POP BC
; POP DE
; POP HL
; POP IY
; POP IX
; RET
;
; BACK_CUR_PATH:
; RET NC
; .force: PUSH IY
; PUSH IX
; PUSH HL
; PUSH DE
; PUSH BC
; PUSH AF
;
; SET_PAGE_X ENVPAGE
; PUSH AF
;
; LD HL,TMP_CURDIR_AUTO
; CALL CHDIR
;
; POP AF
; OUT (SLOT3),A
;
; POP AF
; POP BC
; POP DE
; POP HL
; POP IX
; POP IY
; RET
; ENDIF
;

View File

@ -0,0 +1,101 @@
;---------------------------------------------------------------
;Rev Date Name Description
;---------------------------------------------------------------
;R10 13-04-2023 BAO FIX BUG WITH PARSING DIRECTORY BUFFER
//////////////////////////////////////////////////////////////////////
; !FIXIT âãâ ®¤­¨ § âã¯ë ¨ ¤¥¡¨«¨§¬
; ”ã­ªæ¨ï #47. <20>®«ã祭¨¥ ¨­ä®à¬ æ¨¨ ¯à¨«®¦¥­¨ï.
;
; ¢å®¤: HL - ¡ãä¥à ¤ ­­ëå
; B - ­®¬¥à ¯®¤ä㭪樨:
; B=0 - ¯®«ã祭¨¥ ¯ à ¬¥â஢ ª®¬ ­¤­®© áâப¨
; B=1 - ¯®«ã祭¨¥ ¯®«­®£® ¯ã⨠ª ª â «®£ã ¯à®£à ¬¬ë
; B=2 - ¯®«ã祭¨¥ ¯®«­®£® ¯ã⨠¨ ¨¬¥­¨ ä ©«  ¯à®£à ¬¬ë
; ¢ë室: ­¥â
;
; APPLICATION INFO
;====================
; B = 0 - GET APP_PARAM
; B = 1 - GET APP_PATH
; B = 2 - GET APP_FULLNAME
//////////////////////////////////////////////////////////////////////
;LAST_PSP_PTR: DW 0
APPINFO: INC B
;
DJNZ .FN1
; ¯®«ã祭¨¥ ¯ à ¬¥â஢ ª®¬ ­¤­®© áâப¨ EX DE,HL
XOR A
LD (DE),A
LD HL,(.LAST_PSP_PTR)
LD C,(HL)
INC C
RET Z
INC HL
LDIR
AND A
RET
.FN1: DJNZ .FN2
; ¯®«ã祭¨¥ ¯®«­®£® ¯ã⨠ª ª â «®£ã ¯à®£à ¬¬ë
EX DE,HL
.LAST_PSP_PTR+1:
LD HL,0
LD C,(HL)
INC HL
ADD HL,BC
INC HL
INC HL
PUSH HL
LD BC,#100 ;!HARDCODE ¤«¨­  ª®¬¬ ­¤­®© áâப¨
XOR A
CPIR
DEC HL ;R10 ;[x] ¨á¯à ¢«¥­ ¡ £ á ¯ àᨭ£®¬ ¡ãä¥à  ª â «®£ 
DEC HL ;R10,5 - ­¥ â¥á⨫ ;!!!!!
LD BC,#100 ;R10 ;[x] ­¥ ¡ë«® í⮩ ª®¬ ­¤ë, CPDR ¬®£ ­¥ ¯à®è¥àáâ¨âì ¢áñ ;!HARDCODE ¤«¨­  ª®¬¬ ­¤­®© áâப¨
LD A,'\'
CPDR
INC HL
INC HL
POP BC
AND A
SBC HL,BC
;R10 ;[x] ¬®£«® ¢áñ ¢ ª®á¬®á ã«¥â¥âì
LD A,DSS_Error.sys.COMMON_ERROR
JR C,.error
;
LD A,B ;EX HL,A,BC
LD B,H
LD H,A
LD A,C
LD C,L
LD L,A
LDIR
XOR A
LD (DE),A
RET
;
.FN2: DJNZ .FN3
; ¯®«ã祭¨¥ ¯®«­®£® ¯ã⨠¨ ¨¬¥­¨ ä ©« 
EX DE,HL
LD HL,(.LAST_PSP_PTR)
LD C,(HL)
INC HL
ADD HL,BC
INC HL
INC HL
;
.loop LD A,(HL)
LDI
OR A
JR NZ,.loop
;
RET
;
.FN3:
;
; ®è¨¡ª 
LD A,DSS_Error.sys.INVALID_FUNCTION
.error: SCF
RET
;

View File

@ -0,0 +1,102 @@
////////////////////////////////////////////////////////////////////////
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
; A - ATTRIB
; B - MODE
; B = #00 GET ATTRIB
; B = #01 SET ATTRIB
; OUTPUT: A - ATTRIB
////////////////////////////////////////////////////////////////////////
ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
LD C,A
;
IF OLD_DSS_FOR_OLD_EXE
; [ ] 10/06/24
LD A,(EXE_VERSION)
OR A
JR Z,.old_EXE
;
ENDIF
;
PUSH HL
PUSH BC
CALL DIR_PATH_CHECK
POP BC
POP HL
RET C
.old_EXE: LD A,C
;
;
INC B
DJNZ .B_1
; B = 0
.READ: ;!TEST ;[x] 16/11/23 optimize get attribute
;XOR A
;
CALL .OPENATR ;R002
RET C
;!TEST ;[x] 16/11/23 optimize get attribute
LD A,(HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT)
;LD B,(IY+_sFM.ATTRIBUT)
;PUSH BC
;CALL CLOSE
;POP BC
;RET C
;LD A,B
;
RET
;
.B_1: DJNZ .B_2
;
.WRITE_FN: AND FAT_ATTR.NoVolID ; [x] 2/12/23 ä¨ªá ¤«ï volume ID
.WRITE: PUSH AF
XOR A
;!TEST ;[x] 16/11/23 optimize get attribute
LD (OPEN_FN.TMP),A
;
CALL .OPENATR ;R002
;!TEST ;[x] 16/11/23 optimize get attribute
CALL NC,OPEN_FN.FM
;
POP BC
RET C
SET 7,(IY+_sFM.ACCESS_MODE)
;RES 3,B ;CLEAR LABEL ATTR ;R003
LD (IY+_sFM.FS_REC.ATTRIBUT),B
PUSH BC
CALL CLOSE_FN
.error: POP BC
RET C
LD A,B
RET
;R002
; ¢ë室: ¥á«¨ CF = 0, â® DE = record index
;!TEST 9/11/23 record index
.OPENATR: ;!TEST ;[x] 16/11/23 optimize get attribute
;LD (OPEN.TMP),A ; à ¡. ï祩ª  (§¤¥áì  âਡãâ § ¯¨á¨)
;
CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C
; [ ] 26/06/2024
CALL CHECK_64kb_CLUSTER
RET C
;
CALL MASK
RET C
LD A,FAT_ATTR.NoVolID
;!TEST ;[x] 16/11/23 optimize get attribute
JP SEARCH.Custom
;CALL SEARCH.Custom
;RET C ; § ¯¨áì ­¥ ­ ©¤¥­ 
;JP OPEN.FM ; ­  ¯®¨áª ᢮¡. ¤¥áªà¨¯â®à 
;
;
; [ ] ; !TODO ¤«ï ª®¬ ­¤ë LABEL ¢ Shell
; 1. ¯à®¢¥à¨âì çâ® ¢ HL 㪠§ ­  ⮫쪮 ¬¥âª  ¢ ª ¢ë窠å
; 2. ¥á«¨ ¬¥âª  ¡¥§ ­¥¤®¯ãá⨬ëå ᨬ¢®«®¢, â® ¤¥« ¥¬ ¥ñ ­¥
; ⮫쪮 ¢ BPB, ­® ¨ ­  ª®à­¥¢®¬ à §¤¥«¥, ¨­ ç¥ 㤠«ï¥¬ ­  ª®à­¥¢®¬
; 3. ®âªà뢠¥¬ âà¥¡ã¥¬ë© ¤¨áª ç¥à¥§ .force, ç⮡ á¡à®á¨âì ªíè¨
.B_2: DJNZ .error_fn
;
.error_fn: LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET

View File

@ -0,0 +1,73 @@
;/////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #09. <20>®¬¥à á¨á⥬­®£® ¤¨áª .
; ‚®§¢à é ¥â ­®¬¥à ¤¨áª , c ª®â®à®£® § £à㦥­  á¨á⥬ .
;
; <20>ਠB = 0 (GET)
; ¢ë室: A - ­®¬¥à á¨á⥬­®£® ¤¨áª  (0=A,1=B,..)
; <20>ਠB = 1 (SET - ¨á¯. boot-§ £àã§ç¨ª á¨á⥬ë, ¯®á«¥ 祣® äã­ªæ¨ï ­¥¤®áâ㯭 )
; ¢å®¤: H - ­®¬¥à ãáâனá⢠, L - ­®¬¥à à §¤¥«  ­  ãáâனá⢥
; ¢ë室:
;/////////////////////////////////////////////////////////////////////
BOOTDSK:
INC B
DEC B
JR Z,.GET
DEC B
.chg: JR Z,.SET ;R13 ¬¥­ï¥âáï ­  JR ,SETBOOT ¯®á«¥ ¯¥à¢®£® 㤠筮£® ¨á¯®«­¥­¨ï SETBOOT
LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
.GET: ;GET BOOT DISK
.NUM+1: LD A,0 ;R09
AND A
RET
; ‘®®¡é¨âì DSS á ª ª®£® ¤¨áª  § £à㦠¥âáï á¨á⥬ .
; ˆá¯. § £àã§ç¨ª á¨áâ¥¬ë ¤«ï ¨­¨æ. ï祩ª¨ "boot_disk".
.SET: LD B,H ;SET BOOT DISK
LD C,0
;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD (.part),HL
;
.loop: PUSH BC
LD A,C
LD DE,Dss.DRV.GenIOCTL.Enter
LD BC,Dss.DRV.GenIOCTL.GetParams
RST ToDSS.DRV
;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD A,C ; ­®¬¥à ¯ àâ¨æ¨¨ ¢ MBR ¤¨áª 
;
POP BC
JR C,.NoSupport
EX AF,AF' ;PHISICAL DRIVE NUMBER
CP B
JR NZ,.NoSupport
;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
EX AF,AF' ; ­®¬¥à ¯ àâ¨æ¨¨ ¢ MBR ¤¨áª 
.part+1: LD HL,0
CP L
JR NZ,.NoSupport
;
;R13
LD A,#38 ; opcode for JR C,addr
LD (BOOTDSK.chg),A
;R13
LD A,C
LD (BOOTDSK.NUM),A
AND A
RET
.NoSupport:
INC C
LD A,(LDRIVE)
CP C
JR NZ,.loop
SCF
RET
; <20>®¬¥à ¯®á«¥¤­¥£® ¤¨áª  ¢ á¨á⥬¥
LDRIVE: DB DSS_MAX_DRIVES_AMOUNT
IF COMPILE_UNUSED_CODE
TDRIVE: DB #00
TCLUST: DW #0000
TCOUNT: DW #0000
ENDIF
;

View File

@ -0,0 +1,44 @@
////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #1D. ‘¬¥­  ⥪ã饣® ª â «®£ .
; Œ¥­ï¥â ⥪ã騩 ª â «®£ ¨ ⥪ã騩 ¤¨áª, ¥á«¨ ®­ 㪠§ ­ ¢ ä ©«®¢®©
; ᯥæ¨ä¨ª æ¨¨. …᫨ ¯ãâì ­ ç¨­ ¥âáï á "\" - íâ® ®§­ ç ¥â ¯ãâì ®â
; ª®à­¥¢®£® ª â «®£ , ¨­ ç¥ ®â ⥪ã饣®.
;
; ¢å®¤: HL - 㪠§ â¥«ì ­  ¨¬ï ª â «®£ 
; ¢ë室: ­¥â
;
; INPUT: HL - "C:\DIR\DIR\DIR_NAME[\]",0
////////////////////////////////////////////////////////////////////////
CHDIR_FN:
;!TEST Current Dir ;[x] 15/10/23
;
IF OLD_DSS_FOR_OLD_EXE
; [ ] 10/06/24
LD A,(EXE_VERSION)
OR A
JR Z,CHDIR
;
ENDIF
;
PUSH HL
CALL DIR_PATH_CHECK
POP HL
RET C
CALL CHDIR
; ¥á«¨ 㤠筮, â® ª®¯¨à㥬 WorkDirectory ¢ CurrentDirectory
JP NC,DIR_PATH_CHANGE.FullCurrent
; ¥á«¨ ­¥ã¤ ç­®, â® ¢®§¢à é ¥¬áï â㤠 ®âªã¤  ¯à¨è«¨
PUSH AF
LD HL,CORE_BUFFERS.CurrentDirectory
CALL CHDIR
POP AF
RET
;
CHDIR: CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C
LD HL,TMPNAME
LD A,(HL)
OR A
RET Z
JP OPENDIR
;

View File

@ -0,0 +1,24 @@
////////////////////////////////////////////////////////////////////////
;
;
////////////////////////////////////////////////////////////////////////
CHNDISK_FN: CALL CHNDISK
RET C
PUSH AF
CALL DIR_PATH_CHANGE.FullCurrent
POP AF
RET
CHNDISK: ;[x] ¡®«¥¥ ª®à४⭠ï ᬥ­  ¤¨áª 
CALL OPENDSK
;
;R010
RET C
LD HL,CORE_BUFFERS.WorkDirectory
LD (HL),0
PUSH AF
CALL OPENDIR
POP BC
RET C
LD A,B
RET
;

View File

@ -0,0 +1,86 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
;‚室­ë¥ §­ ç¥­¨ï:
; C - #12
; A - ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
;‚ë室­ë¥ §­ ç¥­¨ï:
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
////////////////////////////////////////////////////////////////////////
CLOSE_FN:
;R008 ;
;CLOSE: ;
LD (.TMP),A
CALL SET_FM
RET C
LD A,(TASK)
CP (IY+_sFM.TASK_NUM)
LD A,DSS_Error.sys.ACCESS_DENIED
SCF
RET NZ
BIT 7,(IY+_sFM.ACCESS_MODE)
JR Z,.NOTMODF
;
LD E,(IY+_sFM.DIR_CLUSTER_L)
LD D,(IY+_sFM.DIR_CLUSTER_L+1)
PUSH DE
; [x] fat32
LD E,(IY+_sFM.DIR_CLUSTER_H)
LD D,(IY+_sFM.DIR_CLUSTER_H+1)
PUSH DE
;
; [x] 15/11/2023 -bug with bad clusters ;!TEST
LD A,(IY+_sFM.DRIVE)
CALL OPENDSK
;
XOR A
CALL SET_FM
; [x] fat32
POP DE
LD (IY+_sFM.DIR_CLUSTER_H),E
LD (IY+_sFM.DIR_CLUSTER_H+1),D
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H),E
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1),D
;
POP DE
LD (IY+_sFM.DIR_CLUSTER_L),E
LD (IY+_sFM.DIR_CLUSTER_L+1),D
; [x] 15/11/2023 -bug with bad clusters ;!TEST
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),E
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),D
;
CALL LOADDIR
.TMP+1: LD A,0
CALL SET_FM
;
SET_PAGE_X DIRPAGE
;
;!TEST 9/11/23 record index
; LD HL,DIR
; LD DE,FAT_DIRECTORY_RECORD
; LD C,(IY+_sFM.HANDLE)
; LD B,(IY+_sFM.HANDLE+1)
; JR .CLOSE2
; .CLOSE1:
; ADD HL,DE
; DEC BC
; .CLOSE2:
; LD A,B
; OR C
; JR NZ,.CLOSE1
LD L,(IY+_sFM.HANDLE)
LD H,(IY+_sFM.HANDLE+1)
;
LD D,YH
LD E,YL
EX DE,HL
;PUSH HL
;SET_PAGE_X DIRPAGE
;POP HL
LD BC,FAT_DIRECTORY_RECORD
LDIR
OUT (SLOT3),A
CALL SAVEDIR
.NOTMODF:
LD A,(.TMP)
JP RES_FM
;

View File

@ -0,0 +1,121 @@
////////////////////////////////////////////////////////////////////////
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
; A - File attribute
; OUTPUT: A - FM
////////////////////////////////////////////////////////////////////////
CREATE: ;!TEST Current Dir ;[x] 15/10/23 ;CREATE_FN:
PUSH HL
LD C,A
;
IF OLD_DSS_FOR_OLD_EXE
; [ ] 10/06/24
LD A,(EXE_VERSION)
OR A
JR Z,.old_EXE
ENDIF
;
PUSH BC
CALL DIR_PATH_CHECK
POP BC
POP HL
RET C
.old_EXE: LD A,C
;
CALL .Prepare
RET C
CALL SEARCH.File
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
;CALL NC,DEL_FN.DELETE ;FILE EXIST RECREAT
CALL NC,.FILE_EXISTS_DEL ;FILE EXIST RECREAT
CP DSS_Error.sys.FILE_NOT_FOUND
JR Z,.DO
SCF
RET
.FILE_EXISTS_DEL:
CALL DELETE_REC_FAT
LD A,DSS_Error.sys.FILE_NOT_FOUND
RET
;
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
; OUTPUT: A - FM
.NEW: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL
LD C,A
;
IF OLD_DSS_FOR_OLD_EXE
; [ ] 10/06/24
LD A,(EXE_VERSION)
OR A
JR Z,.old_EXE
ENDIF
;
PUSH BC
CALL DIR_PATH_CHECK
POP BC
POP HL
RET C
.old_EXE_: LD A,C
;
CALL .Prepare
RET C
CALL SEARCH.File
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
; LD A,DSS_Error.sys.FILE_EXISTS
; CCF
; RET C
JR NC,.FILE_EXISTS
CP DSS_Error.sys.FILE_NOT_FOUND
SCF
RET NZ
;
;
;no_file_found
.DO: ; FAT_DIRECTORY_RECORD.NAME + .EXT
LD HL,MASKARE
LD DE,HANDBUF
LD BC,11
LDIR
EX DE,HL
.TMP+1: LD A,0
; FAT_DIRECTORY_RECORD.ATTRIBUT
LD (HL),A
INC HL
LD BC,#0A00 ;!HARDCODE
; .RESERVED_NT .. .FIRST_CLUSTER_H
.loop1: LD (HL),C
INC HL
DJNZ .loop1
; .TIME .. .DATE
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
;
LD BC,#0600
;
.loop2: LD (HL),C
INC HL
DJNZ .loop2
;
CALL WRT_HND
RET C
;CALL SAVEDIR
.PATH0+1: LD HL,0
XOR A
LD (OPEN_FN.TMP),A
JP OPEN_FN.FILE ;R008
;
.Prepare: ;AND #E7 ;R004 %76A00SHR = !FAT_ATTR ;!HARDCODE
AND FAT_ATTR.NoDIRnoVolID
LD (.TMP),A
LD (.PATH0),HL
CALL GETWORD
RET C
; [ ] 26/06/2024
CALL CHECK_64kb_CLUSTER
RET C
;
JP MASK
;
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
.FILE_EXISTS: LD A,DSS_Error.sys.FILE_EXISTS
CCF
RET
;

View File

@ -0,0 +1,30 @@
;/////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #02. <20>®¬¥à ⥪ã饣® ¤¨áª .
;
; ¢å®¤: ­¥â
; ¢ë室: A - ­®¬¥à ¤¨áª  (0=A,1=B,..)
; C - ­®¬¥à ¯®á«¥¤­¥£® ¤¨áª  ¢ á¨á⥬¥
;/////////////////////////////////////////////////////////////////////
CURDISK_FN:
;
IF OLD_DSS_FOR_OLD_EXE
; [ ] 10/06/24
LD A,(EXE_VERSION)
OR A
JR Z,CURDISK
;
ENDIF
LD A,(LDRIVE)
LD C,A
LD A,(CORE_BUFFERS.CurrentPath)
SUB 'A'
RET NC
LD A,DSS_Error.sys.INVALID_DRIVE
RET
CURDISK:
LD A,(LDRIVE)
LD C,A
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
AND A
RET
;

View File

@ -0,0 +1,24 @@
////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #1E. ˆ­ä®à¬ æ¨ï ® ⥪ã饬 ª â «®£¥.
;
; ¢å®¤: HL - ¡ãä¥à ¢ ¯ ¬ï⨠256 ¡ ©â
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
////////////////////////////////////////////////////////////////////////
CURRDIR: LD DE,CORE_BUFFERS.WorkDirectory
JR CURRDIR_FN.skip
CURRDIR_FN:
LD DE,CORE_BUFFERS.CurrentDirectory
.skip: EX DE,HL
LD BC,DIRECTORY_PATH_LENGTH ;[x] 15/11/2023 ¬®£«® ¢ë©â¨ §  ¯à¥¤¥«ë ¡ãä¥à 
XOR A
.loop: CP (HL)
LDI
JP PO,.error ;[x] 15/11/2023 ¬®£«® ¢ë©â¨ §  ¯à¥¤¥«ë ¡ãä¥à 
JR NZ,.loop
RET
;[x] 15/11/2023 ¬®£«® ¢ë©â¨ §  ¯à¥¤¥«ë ¡ãä¥à 
.error: LD A,DSS_Error.sys.TOO_DEEP_DIR_DEPTH
SCF
RET
;
;

View File

@ -0,0 +1,43 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
; INPUT: HL - "c:\dir\filename.ext",#00 without simbols * ?
////////////////////////////////////////////////////////////////////////
DEL_FN: ;!TEST
;!TEST Current Dir ;[x] 15/10/23
;
IF OLD_DSS_FOR_OLD_EXE
; [ ] 10/06/24
LD A,(EXE_VERSION)
OR A
JR Z,.old_EXE
ENDIF
;
PUSH HL
CALL DIR_PATH_CHECK
POP HL
RET C
;
.old_EXE: CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C
; [ ] 26/06/2024
CALL CHECK_64kb_CLUSTER
RET C
;
CALL MASK
RET C
;
;!TEST optimization
;LD HL,MASKARE
;LD BC,11
;LD A,"?"
;CPIR
;LD A,DSS_Error.sys.INVALID_NAME
;SCF
CALL CHECK_NAME
;
RET Z
CALL LOADDIR
CALL SEARCH.File
RET C
JP DELETE_REC_FAT ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥­­ ï"
;

View File

@ -0,0 +1,260 @@
;/////////////////////////////////////////////////////////////////////
; [ ] ­®¢ ï ¯®¤äã­ªæ¨ï á ¡¨â®¬ 7 ¢ ॣ. €
; ‚®§¢à é ¥â ¨­ä®à¬ æ¨î ®¡ ®¡é¥¬ ¨ ᢮¡®¤­®¬ ¯à®áâà ­á⢥ ¤¨áª®¢®£®
; ãáâனá⢠.
;
; ¢å®¤: A - ­®¬¥à ¤¨áª  (0=A,1=B .. 25=Z. #FF-⥪ã騩)
; <09>ਠA bit7 = 1:
; A and #7F - ­®¬¥à ¤¨áª 
; HL - ¡ãä¥à (256 ¡ ©â®¢) ¤«ï à áè¨à¥­­ëå ¤ ­­ëå:
; B != 0 - áç¨â âì ᢮¡®¤­®¥ ¬¥áâ®
; ;
; à §¬¥à ¯®«ï - 1 ¡ ©â
; ” ©«®¢ ï á¨á⥬ 
; ;
; à §¬¥à ¯®«ï - 1 ¡ ©â
; ‘¥à¨©­ë© ­®¬¥à ¤¨áª 
; ;
; à §¬¥à ¯®«ï - 1 ¡ ©â
; Œ¥âª  ¤¨áª 
; ;
; à §¬¥à ¯®«ï - 1 ¡ ©â
; 䨧¨ç¥áª¨© ­®¬¥à ¤¨áª , ­®¬¥à à §¤¥« 
; ;
; à §¬¥à ¯®«ï - 1 ¡ ©â
; § à¥§¥à¢¨à®¢ ­®
; ;
; ¢ë室: CF=0:
; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
; HL':HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
; DE':DE - ᢮¡®¤­ëå ª« áâ¥à®¢
; BC - à §¬¥à ᥪâ®à  ¢ ¡ ©â å
; CF=1:
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Œ¥âª  ¤¨áª  ¯à®¢¥àï¥âáï á­ ç «  ¢ ª®à­¥¢®¬ ª â «®£¥ ¨ ¥á«¨ â ¬ ;
; ­¥â, â® ¡¥àñâáï ¬¥âª  ¨§ BPB ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;/////////////////////////////////////////////////////////////////////
DISKINF: LD C,B
LD B,1
;
CP #80
JP C,.CustomDisk
CP #FF
JR Z,.CurrentDisk
; more info
LD B,C
AND %0111'1111
PUSH HL
PUSH AF
CALL .CustomDisk
POP IX
JR C,.error
;
EX (SP),HL
PUSH DE
PUSH AF
PUSH BC
;;;;
;
EX DE,HL
LD HL,FAT_STRING
LD C,5 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length
CALL .mCOPY_LOOP
; 12, 16 or 32
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
CP FAT_TYPE.x16
JR C,.next_prm
;
PUSH DE
DEC DE
LD A,'6'
JR Z,.put_char
; fat 32
DEC DE
LD A,'3'
.put_char: LD (DE),A
POP DE
;
.next_prm: LD HL,CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER
LD C,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER
CALL .mCOPY_LOOP
;
; fat32
EXX
PUSH DE
PUSH HL
EXX
;LD HL,CORE_BUFFERS.FatBuffer.BPB_LABEL
PUSH IX
CALL GET_LABEL
LD C,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL
CALL .mCOPY_LOOP
POP AF
PUSH DE
;LD A,XH
LD DE,Dss.DRV.GenIOCTL.Enter
LD BC,Dss.DRV.GenIOCTL.GetParams
RST ToDSS.DRV
POP DE
; fat32
EXX
POP HL
POP DE
EXX
JR C,.error_drv
LD A,2 ;!HARDCODE ¤«¨­  ¯®«ï ü4 2 ¡ ©â : 䨧 ­®¬¥à ¤¨áª , ­®¬¥à à §¤¥«  ¤¨áª 
LD (DE),A
INC DE
EX AF,AF'
LD (DE),A ;䨧 ­®¬¥à ¤¨áª 
INC DE
LD A,C
LD (DE),A ;­®¬¥à à §¤¥«  ¤¨áª 
INC DE
;
.error_drv: XOR A
LD (DE),A
;;;;
POP BC
POP AF
POP DE
.error: POP HL
RET
;
CP #FF ; !FIXIT WorkDirectory
;!TEST !Current Dir
;JR Z,CURRDS ;R06
.CurrentDisk: ; [ ] 10/06/24
IF OLD_DSS_FOR_OLD_EXE
LD A,(EXE_VERSION)
OR A
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
JR Z,.old_EXE
ENDIF
;
LD A,(CORE_BUFFERS.CurrentPath)
SUB 'A'
.old_EXE: LD HL,CORE_BUFFERS.FatBuffer.DRIVE
CP (HL)
JR Z,.CheckFreeSpace
;
.CustomDisk: PUSH BC
CALL CHNDISK ;R06
POP BC
RET C
;
.CheckFreeSpace:; ¥á«¨ GetFreeSpace ­¥ ¢ë§ë¢ ¥âáï
XOR A
OR B
LD BC,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L)
EXX
LD BC,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H)
EXX
CALL NZ,GetFreeSpace
;
;.FRESP2:
; A = 0 if B != 0 before .GetFreeSpace
;
LD H,B
LD L,C
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
EX DE,HL
EXX
LD H,B
LD L,C
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
EX DE,HL
EXX
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
DEC HL
; fat 32
EXX
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterHigh)
JR NC,.skip_dec_hl
DEC HL
.skip_dec_hl: EXX
LD BC,(CORE_BUFFERS.FatBuffer.BytesPerSector)
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
AND A
RET
;
; [ ] 22/11/23 ¯®¤äã­ªæ¨ï á ¤®¯.¨­ä®©
.mCOPY_LOOP: LD B,0
EX DE,HL
LD (HL),C
EX DE,HL
INC DE
LDIR
RET
;
;
GetFreeSpace: LD A,1
LD (CORE_BUFFERS.FatBuffer.UPD_FSINFO),A
LD HL,2 ; fat32 ­®¬¥à ª« áâ¥à  ®â ª®â®à®£® áç¨â âì
XOR A
; fat32
EXX
LD H,A
LD L,A
LD B,A
LD C,A
EXX
LD B,A
LD C,A
.loop_free_space:;!FIXIT
PUSH BC
EXX
PUSH BC
EXX
CALL READ_FROM_FAT
EXX
POP BC
EXX
POP BC
CP DSS_Error.sys.DISK_FULL
RET Z
; fat 32
EXX
LD A,E
OR D
EXX
OR E
OR D
JR NZ,.skip
;
INC BC
LD A,B
OR C
JR NZ,.skip
EXX
INC BC
EXX
;
.skip: INC HL
LD A,L
OR H
JR NZ,.loop_free_space
EXX
INC HL
EXX
JP .loop_free_space
;
FAT_STRING: DB 'FAT12'
;
; DE - ¡ãä¥à
GET_LABEL: PUSH DE
LD HL,.LABEL_MASK ; "\*.*" ¨¬ï ¬¥âª¨
LD A,FAT_ATTR.VOLUME_ID ;  âਡãâ ¬¥âª¨ ⮬ 
LD B,high Dss.F_First.FATname
CALL F_FIRST
;LD BC,Dss.F_First.FATname ; f_first, ä®à¬ â 11
;RST ToDSS
POP DE
LD HL,CORE_BUFFERS.FatBuffer.BPB_LABEL
RET C
LD HL,BUFFER_FIND.REC_Name
ADD HL,DE
RET
.LABEL_MASK: DB '\*.*',0

View File

@ -0,0 +1,22 @@
////////////////////////////////////////////////////////////////////////
;‚室­ë¥ §­ ç¥­¨ï:
; C - #44
; B = 0, ¯à¥®¡à §®¢ âì ¨§ 11 ᨬ¢®«ì­®£® ä®à¬ â  ¢ ä®à¬ â „Ž‘
; HL - 11 ᨬ¢®«®¢ ¨¬¥­¨ ä ©« 
; DE - ¡ãä¥à ¤«ï ¨¬¥­¨ ¢ ä®à¬ â¥ „Ž‘
; B = 1, ¯à¥®¡à §®¢ âì ¨§ ä®à¬ â  „Ž‘ ¢ 11 ᨬ¢®«ì­ë© ä®à¬ â
; HL - ¨¬ï ä ©«  ¢ ä®à¬ â¥ „Ž‘
; DE - 11 ᨬ¢®«®¢ ¨¬¥­¨ ä ©« 
;‚ë室­ë¥ §­ ç¥­¨ï:
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
////////////////////////////////////////////////////////////////////////
DOSNAME:
INC B
DEC B
JP Z,GetName
DEC B
JP Z,MASK.custom
LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
;

View File

@ -0,0 +1,294 @@
;[BEGIN]
;//MODULE: ENVIRON
;//CREATE: 10-11-2002 AUTHOR: Denis Parinov
;---------------------------------------------------------------
;Rev Date Name Description
;---------------------------------------------------------------
;R02 13-05-2023 BAO ˆ­¨æ¨ «¨§ æ¨ï ¯¥à¥¬¥­­®© BOOTDSK ¯à¨ áâ àâ¥
;R03 09-03-2007 VAS ”ã­ªæ¨ï ENV_EX ⥯¥àì ®¡à¥§ ¥â ᫨誮¬ ¤«¨­­ãî áâப㠯¥à¥¤ ¢ë室®¬
;R01 19-11-2002 DNS CORRECT DE ADDRESS IN GETENV
;---------------------------------------------------------------
;/////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #46. ‘¨á⥬­®¥ ®ªà㦥­¨¥.
;
; ¢å®¤: B - ­®¬¥à ¯®¤ä㭪樨:
; B=#FF, ¨­¨æ¨ «¨§ æ¨ï
; B=0, ¯®«ã祭¨¥ á¨á⥬­®£® ®ªà㦥­¨ï.
; HL - ¡ãä¥à
; B=1, ¯®«ãç¨âì ¯¥à¥¬¥­­ãî ®ªà㦥­¨ï.
; HL - ¨¬ï ¯¥à¥¬¥­­®©
; DE - ¡ãä¥à ¤«ï §­ ç¥­¨ï ¯¥à¥¬¥­­®©
; B=2, ãáâ ­®¢¨âì/㤠«¨âì ¯¥à¥¬¥­­ãî ®ªà㦥­¨ï
; HL - <20><EFBFBD>…Œ…<C592><E280A6>€Ÿ=‡<>€—…<E28094>ˆ
; ª®­æ¥ áâப¨ ­®«ì.
; ¢ë室: A - á®áâ®ï­¨¥, ¥á«¨ CF=0
; DE - 㪠§ë¢ ¥â ­  ª®­¥æ ¡ãä¥à  (⮫쪮 ¤«ï B=1)
; A=#FF - ¯¥à¥¬¥­­ ï ®¡­ à㦥­ 
; A=0 - ¯¥à¥¬¥­­ ï ­¥ ®¡­ à㦥­ 
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
;/////////////////////////////////////////////////////////////////////
ENVIRON:
INC B
JR Z,INITENV ; B=#FF
DEC B
JR Z,READENV ; B=0. ¯®«ãç¨âì á¨áâ. ®ªà㦥­¨¥
DEC B
JP Z,GETENV ; B=1. ¯®«ãç¨âì ¯¥à¥¬. ®ªà㦥­¨ï
DEC B
JP Z,SETENV ; B=2. ãáâ ­®¢¨âì/㤠«¨âì ¯¥à¥¬. ®ªà㦥­¨ï
LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
;-------------------------------------------------
; ˆ­¨æ¨ «¨§ æ¨ï ¡ãä¥à  ¯¥à¥¬¥­­ëå ®ªà㦥­¨ï
;-------------------------------------------------
INITENV:
SET_PAGE_X ENVPAGE
PUSH AF
;
;R02
LD A,(BOOTDSK.NUM)
ADD A,'A'
LD (DEFAULT_ENV.boot_disk),A
;
LD DE,ENVIRONMENT ; ­ ç «® ¡ãä¥à  ¯¥à¥¬¥­­ëå ®ªà㦥­¨ï
XOR A
LD (DE),A
INC DE
LD HL,DEFAULT_ENV
LD BC,DEF_ENV_SIZE
LDIR
LD (DE),A
EX DE,HL
LD DE,ENVIRONMENT
AND A
SBC HL,DE
LD (ENVSIZE),HL
;
POP AF
OUT (SLOT3),A
AND A
RET
;-------------------------------------------------
; <20>®«ãç¨âì á¨áâ. ®ªà㦥­¨¥
;-------------------------------------------------
READENV:
PUSH HL
SET_PAGE_X ENVPAGE
LD H,A
LD C,SLOT3
IN L,(C)
EXX
LD HL,ENVIRONMENT
INC HL
POP DE
LD BC,(ENVSIZE)
EXX
;
.loop: OUT (C),L
EXX
LD A,(HL)
EXX
OUT (C),H
EXX
LD (DE),A
INC HL
INC DE
DEC BC
LD A,B
OR C
EXX
JR NZ,.loop
//XOR A
;A=0
RET
;-------------------------------------------------
; <20>®«ãç¨âì ¯¥à¥¬¥­­ãî ®ªà㦥­¨ï
;-------------------------------------------------
GETENV: PUSH DE
CALL ENV_EX ; ᪮¯¨à. áâப㠯¥à¥¬. ®ªàã¦. ¢ ¡ãä¥àë
SET_PAGE_X ENVPAGE
EX AF,AF'
CALL F_ENV ; RET: DE - VAR VALUE; HL - VAR ADDRESS; BC - ENVIRONMENT SIZE
POP DE
LD A,0
LD (DE),A
JR NC,.exit
.loop: LD A,(HL)
LDI
OR A
JR NZ,.loop
DEC DE ;R01
LD A,#FF
.exit: EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
AND A
RET
;-------------------------------------------------
; “áâ ­®¢¨âì/“¤ «¨âì ¯¥à¥¬¥­­ãî ®ªà㦥­¨ï
;
; ¢å®¤: hl=¨¬ï ¯¥à¥¬. ¨ §­ ç¥­¨¥, à §¤¥«. ᨬ¢®«®¬ "="
;-------------------------------------------------
SETENV: CALL ENV_EX ; ᪮¯¨à. áâப㠯¥à¥¬. ®ªàã¦. ¢ ¡ãä¥àë
SET_PAGE_X ENVPAGE
PUSH AF
CALL F_ENV ; RET: DE - VAR VALUE; HL - VAR ADDRESS; BC - ENVIRONMENT SIZE
JR NC,PENV
XOR A
CPIR
LD A,B
OR C
JR Z,PENV
LDIR
PENV LD A,(ENVVALUE)
OR A
JR Z,CLR_ENV
LD HL,ENVNAME
F_EVN2 LD A,(HL)
LDI
CP "="
JR NZ,F_EVN2
LD HL,ENVVALUE
F_EVN3 LD A,(HL)
LDI
OR A
JR NZ,F_EVN3
CLR_ENV XOR A
LD (DE),A
LD HL,ENVIRONMENT
EX DE,HL
SBC HL,DE
LD (ENVSIZE),HL
;
POP AF
OUT (SLOT3),A
AND A
RET
; RET:
; DE - VAR VALUE
; HL - VAR ADDRESS
; BC - ENVIRONMENT SIZE
F_ENV LD HL,ENVIRONMENT
LD BC,(ENVSIZE)
PUSH HL
F_EVN0 POP DE
LD DE,ENVNAME
XOR A
CPIR
PUSH HL
F_EVN1 LD A,(HL)
OR A
JR Z,END_OF_ENV
LD A,(DE)
CP (HL)
INC HL
INC DE
DEC BC
JR NZ,F_EVN0
CP "="
JR NZ,F_EVN1
SCF
END_OF_ENV
POP DE
RET
;-----------------------------------------------------------
; ‘ª®¯¨à®¢ âì áâப㠯¥à¥¬¥­­®© ®ªà㦥­¨ï ¢ ¡ãä¥àë
; (¨¬ï ¨ §­ ç¥­¨¥ ¢ à §­ë¥ ¡ãä¥àë)
; ¢å®¤: hl=¨¬ï ¯¥à¥¬. ¨ §­ ç¥­¨¥, à §¤¥«. ᨬ¢®«®¬ "="
;-----------------------------------------------------------
ENV_EX: LD B,ENVIRONMENT_STRING_LENGTH ; 255 ¬ ªá. ¤«¨­  áâப¨ (¨¬ï+§­ ç.)
LD DE,ENVNAME ; ªã¤ 
ENV_E0: XOR A
LD (DE),A
LD (ENVVALUE),A
; ᪮¯¨à. ¢ "ENVNAME" ¨¬ï ¯¥à¥¬¥­­®©
ENV_E1: LD A,(HL)
INC HL
CP "="
JR Z,EQUAL_SG
OR A
JR Z,ENV_E3
CALL UPPER
LD (DE),A
INC DE
DJNZ ENV_E1
;R03
; ᫨誮¬ ¤«¨­­ ï áâப 
ld a,b
ld (de),a ; ®¡à¥§ âì ᫨誮¬ ¤«¨­­ãî áâபã
inc de
;
SCF
RET
; §­ ç¥­¨¥ ­¥ § ¤ ­®
ENV_E3: LD A,"="
LD (DE),A
INC DE
XOR A
LD (DE),A
INC DE
RET
; §­ ç¥­¨¥ § ¤ ­®
EQUAL_SG: LD (DE),A ; á®åà. "="
INC DE
XOR A
LD (DE),A ; ¢ ª®­¥æ ¨¬¥­¨ ¯¥à¥¬.
; ᪮¯¨à. ¢ "ENVVALUE" §­ ç¥­¨¥ ¯¥à¥¬¥­­®© (áâப㠯ã⥩)
LD DE,ENVVALUE ; 512 ¡ ©â, ¡ãä¥à
LD (DE),A
LD C,#FF ; ç⮡ë "ldi" ­¥ ¯®à⨫  "b"
ENV_E2 LD A,(HL)
LDI
OR A
RET Z ; ª®­¥æ áâப¨ §­ ç. ¯¥à¥¬¥­­®©
DJNZ ENV_E2
;R03
; ᫨誮¬ ¤«¨­­ ï áâப 
ld a,b
ld (de),a ; ®¡à¥§ âì ᫨誮¬ ¤«¨­­ãî áâபã
inc de
;
SCF
RET
ENVNAME EQU CORE_BUFFERS.EXEBUFF ;DS 32
ENVVALUE EQU CORE_BUFFERS.BUFFER //#3800 ; BUFFER ;DS 128
ENVSIZE DW DEF_ENV_SIZE ;E_END-ENVIRONMENT ;160
ENVIRONMENT EQU ENVADDR
DEFAULT_ENV: DB 'BOOTDSK=' ;R02
.boot_disk: DB 'X:',0 ;R02
; DB 'SYSTEM=C:\system.exe',0
; DB 'PATH=\SYSTEM\;\COMMAND\;',0
DEF_ENV_SIZE EQU $-DEFAULT_ENV ;R02
; DB 'SYSTEM=C:\system.exe',0
; DB 'PATH=\SYSTEM\;\COMMAND\;',0
; DB 0
; DB 'SYSTEM=C:\system.exe',0
; DB 'PATH=C:\;\FN\;',0
; DB 'OS=ESTEX',0
; DB 'VAR1=000',0
; DB 'OSNAME=ESTEX 2002',0
; DB 0

View File

@ -0,0 +1,240 @@
//////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #45. <20> §¡®à ª®¬ ­¤­®© áâப¨.
;
; ¢å®¤: HL - 㪠§ â¥«ì ª®¬ ­¤­®© áâப¨
; DE - 㪠§ â¥«ì ­  ¡ãä¥à ¯®«ì§®¢ â¥«ï
; B - ­®¬¥à ¯®¤ä㭪樨:
; 0 - <20> §®¡à âì áâபã
; 1 - ‚뤥«¨âì ¨¬ï ¤¨áª 
; 2 - ‚뤥«¨âì ¤¨à¥ªâ®à¨î
; 3 - ‚뤥«¨âì ¨¬ï ä ©« 
; 4 - ‚뤥«¨âì à áè¨à¥­¨¥ ä ©« 
; 5 - ‚뤥«¨âì ¨¬ï ¤¨áª , ¯ãâì ª ä ©«ã, ¨¬ï ä ©«  ¨ à áè. ä ©« 
; 6 - ‡ à¥§¥à¢¨à®¢ ­® ;!TODO ¯à¥®¡à §®¢ âì ®â­®á¨â¥«ì­ë© ¯ãâì ¢ ¯®«­ë© ; [ ]
; 7 - ‚뤥«¨âì ¯ à ¬¥âà ª®¬ ­¤­®© áâப¨
; 8 - <20>८¡à §®¢ âì ¨§ 11 ᨬ¢®«ì­®£® ä®à¬ â  ¢ ä®à¬ â „Ž‘
; 9 - <20>८¡à §®¢ âì ¨§ ä®à¬ â  „Ž‘ ¢ 11 ᨬ¢®«ì­ë© ä®à¬ â
; ¢ë室: ­¥â
//////////////////////////////////////////////////////////////////////
GLOB_PR EQU 7 ;%10000000
DRIV_PR EQU 3 ;%00001000
PATH_PR EQU 2 ;%00000100
EXTN_PR EQU 1 ;%00000010
NAM_PR EQU 0 ;%00000001
EX_PATH: EXX
LD HL,NM_PATH_A ;BUILT-IN BUFFER FOR PATH ;!!!!! ¨á¯®«ì§ã¥âáï ®¡é¨© ¡ãä¥à
LD (NM_PATH),HL
LD HL,NM_NAME_A
LD (NM_NAME),HL
LD HL,NM_EXTN_A
LD (NM_EXTN),HL
LD HL,NM_DRIVE_A
LD (NM_DRIVE),HL
EXX
INC B
DEC B
JR Z,.FULL ;0 ; à §®¡à âì áâபã
DEC B
JR Z,.GET_DRIVE ;1 ; ¢ë¤¥«¨âì ¨¬ï ¤¨áª 
DEC B
JR Z,.GET_PATH ;2 ; ¢ë¤¥«¨âì ¤¨à¥ªâ®à¨î
DEC B
JR Z,.GET_NAME ;3 ; ¢ë¤¥«¨âì ¨¬ï ä ©« 
DEC B
JR Z,.GET_TYPE ;4 ; ¢ë¤¥«¨âì à áè¨à¥­¨¥ ä ©« 
DEC B
JR Z,.GET_ALL_EX ;5 ; ¢ë¤¥«¨âì ¤¨áª, ¯ãâì, ä ©« ¨ à áè.
DEC B
JR Z,.EX_RESR ;6 ; § à¥§¥à¢¨à®¢ ­®
DEC B
JP Z,GSWITCH ;7 ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
DEC B
JP Z,GetName ;8 ; ¯à¥®¡à. ¨¬ï 11 -> 8.3 ä®à¬ â
DEC B
JP Z,MASK.custom ;9 ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â
.EX_RESR: LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
; ‚뤥«¨âì ¨¬ï ¤¨áª 
.GET_DRIVE: LD (NM_DRIVE),DE
CALL .FULL
RET C
LD DE,(NM_DRIVE)
LD A,(DE)
DEC A
CP #FF
RET Z
CP "A"-1
JR C,.GD_error
CP "Z"
JR NC,.GD_error
SUB "A"-1
RET
;
.GD_error: LD A,DSS_Error.sys.INVALID_DRIVE
SCF
RET
; ‚뤥«¨âì ¤¨à¥ªâ®à¨î
.GET_PATH: LD (NM_PATH),DE
JR .FULL
; ‚뤥«¨âì ¨¬ï ä ©« 
.GET_NAME: LD (NM_NAME),DE
JR .FULL
; ‚뤥«¨âì à áè¨à¥­¨¥ ä ©« 
.GET_TYPE: LD (NM_EXTN),DE
JR .FULL
; ‚뤥«¨âì ¤¨áª, ¯ãâì, ä ©« ¨ à áè.
.GET_ALL_EX: EX DE,HL
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD (NM_DRIVE),BC
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD (NM_PATH),BC
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD (NM_NAME),BC
LD C,(HL)
INC HL
LD B,(HL)
LD (NM_EXTN),BC
EX DE,HL
;JR EX_FULL
; <20> §®¡à âì áâபã
.FULL: EX AF,AF'
EXX
XOR A
LD HL,(NM_PATH)
LD (HL),A
LD HL,(NM_NAME) ;  ¤à¥á ¡ãä¥à  ¯®¤ ¨¬ï ä ©« 
LD (HL),A
LD HL,(NM_EXTN)
LD (HL),A
LD HL,(NM_DRIVE)
LD (HL),A
EXX
EX AF,AF'
.PAT0: LD DE,TMPBUF
LD BC,#0D01 ;!HARDCODE áç¥â稪¨
.PAT1: LD A,(HL)
CALL UPPER ; a..z -> A..Z
LD (DE),A
INC HL
INC DE
INC C ; ++áç¥â稪
CP '\'
JR Z,.PATH_YEP
CP ":"
JR Z,.DRIVE_YEP
CP "!"
JR C,.NAME_YEP
CP "?"
JR Z,.GLOBP1
CP "*"
JR Z,.GLOBP1
.PAT2: DJNZ .PAT1
LD A,DSS_Error.sys.INVALID_NAME
SCF
RET
;
.GLOBP1: EX AF,AF'
SET GLOB_PR,A
EX AF,AF'
JR .PAT2
;
.NAME_YEP: LD A,2
CP C
JR Z,.NOFNAME
PUSH HL
LD HL,TMPBUF
LD DE,(NM_NAME) ;  ¤à¥á ¡ãä¥à  ¯®¤ ¨¬ï ä ©« 
LD B,0
DEC C
DEC C
LD A,C
LDIR
LD C,A
XOR A
LD (DE),A
LD HL,(NM_NAME)
LD A,"."
CPIR
JR NZ,.NOEXTN
LD C,3
LD DE,(NM_EXTN)
.EXTSK0: LD A,(HL)
OR A
JR NZ,.EXTSK1
LD A,' '
DEC HL
.EXTSK1: LD (DE),A
INC HL
INC DE
DEC C
JR NZ,.EXTSK0
XOR A
LD (DE),A
EX AF,AF'
SET EXTN_PR,A ; 㪠§ ­® à áè. ä ©« 
EX AF,AF'
.NOEXTN: EX AF,AF'
SET NAM_PR,A ; 㪠§ ­® ¨¬ï ä ©« 
EX AF,AF'
POP HL
.NOFNAME: EX AF,AF'
AND A
RET
;
.DRIVE_YEP: XOR A
LD (DE),A
PUSH HL
LD HL,TMPBUF
LD DE,(NM_DRIVE)
LD B,0
LDIR
POP HL
EX AF,AF'
SET DRIV_PR,A ; 㪠§ ­® ¨¬ï ¤¨áª 
EX AF,AF'
JP .PAT0
;
.PATH_YEP: XOR A
LD (DE),A
PUSH HL
PUSH BC
LD HL,(NM_PATH)
LD BC,#00FF ; !FIXIT £«ã¡¨­  ¡ãä¥à  ­¥ § ¢¨á¨â ®â CurrentDirectory.DEPTH
CPIR
DEC HL
EX DE,HL
LD HL,TMPBUF ; 12 ¯à®¡¥«®¢
POP BC
LD B,0
LDIR
POP HL
EX AF,AF'
SET PATH_PR,A
EX AF,AF'
JP .PAT0
;!TODO ¯¥à¥­¥áâ¨/§ ¬¥­¨âì ­  ®¡é¨©
TMPBUF: DB " ",#00 ; 12 ¯à®¡¥«®¢
NM_DRIVE: DW NM_DRIVE_A
NM_NAME: DW NM_NAME_A
NM_EXTN: DW NM_EXTN_A
NM_PATH: DW NM_PATH_A
NM_DRIVE_A: BLOCK 9,0
NM_NAME_A: DB " ",#00 ; 12 ¯à®¡¥«®¢
NM_EXTN_A: DB " ",0
NM_PATH_A EQU CORE_BUFFERS.BUFFER ;DS 256 ;!!!!! shared buffer

View File

@ -0,0 +1,804 @@
;[BEGIN]
;//MODULE: EXECUTE
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
;//UPDATE: 24-10-1999 DNS Restore module
;-------------------------------------------------------------------------------------------------------------------------
;Rev Date Name Description
;-------------------------------------------------------------------------------------------------------------------------
;R12 20-07-2023 BAO <20>ਠ§ ¢¥à襭¨¨ ¯à¨«®¦¥­¨ï " ¢ à¨©­®" ¢ ¢®§¢à é ¥¬®¥ ¯à¨«®¦¥­¨¥ ¯¥à¥¤ ñâáï ª®¤ ®è¨¡ª¨ ¨ ä« £ CF=1
;R11 17-04-2023 BAO OPTIMIZED BUFFERS, FREED UP 768 BYTES FOR CODE
;R09 -- 14-04-2003 DNS NOW EXEC DON'T FOLLOW TO PROGRAM'S DIR
;R08 05-12-2002 DNS FIX BUG WITH INCREMENT TASK ID AND OPEN *.EXE ERROR
;R07 05-12-2002 DNS FIX FOR EXECUTING IN CURRENT DIR WITHOUT PATH
;R06 02-12-2002 DNS FIX BUG WITH NULL-TERMINATED STRING
;R05 02-12-2002 DNS ADD APP_PATH TO THE PROGRAM PREFIX
;R04 26-11-2002 DNS TRY TO FIX EXEC WITH PATH
;R03 19-11-2002 DNS CHECK SUBFN. FOR FN. EXEC
;R02 24-05-1999 DNS FIX CREATE PSP AND
; MOVE EXEC STACK
; 14-05-1999 DNS DECREASE HEADER SIZE FOR EXE-FILE
;-------------------------------------------------------------------------------------------------------------------------
RELATIVE_DIR EQU 0
ABSOLUTE_DIR EQU 1
MACRO _mINCTASK
LD HL,TASK ;R08
INC (HL) ;R08
ENDM
;
MACRO _mDECTASK
LD HL,TASK ;R08
DEC (HL) ;R08
ENDM
;-------------------------------------------------------------------------------------------------------------------------
;;;
;TMP_CURDIR_AUTO EQU #FB00
; ­¥ ­ã¦­® ¥á«¨ SAVE_PATH_MACRO = 1
; TMP_CURDIR EQU #FD00
;///////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #40. ‚믮«­¨âì ä ©«.
;
; ¢å®¤: HL - 㪠§ â¥«ì ­  ¨¬ï ä ©« 
; B=0 - § £à㧨âì ¨ ¢ë¯®«­¨âì ¯à®£à ¬¬ã á ª®à®âª¨¬ ¨¬¥­¥¬ (¡¥§ ¯®«­®£® ¯ã⨠¤® ¯à®£à ¬¬ë)
; B=1 - § £à㧨âì ¨ ¢ë¯®«­¨âì ¯à®£à ¬¬ã á ¯®«­ë¬ ¯ãâñ¬ ¤® ¯à®£à ¬¬ë
; ¢ë室: A - ª®¤ § ¢¥à襭¨ï, ¥á«¨ CF=0
; ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
;---------------------------------------------------------------------
; ‡ £à㧨âì ¨ ¢ë¯®«­¨âì ¯à®£à ¬¬ã.
; äã­ª. #40, B=0.
;
; 1) Žâªà뢠¥â exe-ä ©« ­  ç⥭¨¥;
; 2) ‘ç¨â뢠¥â ¢ à ¡®çãî ®¡« áâì ¯à¥ä¨ªá exe-ä ©« ;
; 3) ‚뤥«ï¥â ¡«®ª ¯ ¬ïâ¨, âà¥¡ã¥¬ë© ¤«ï § £à㧪¨ ¢á¥£® ä ©«  ¨«¨ ¯¥à¢¨ç­®£®
; § £àã§ç¨ª , ¥á«¨ ¥£® à §¬¥à ­¥ à ¢¥­ ­ã«î;
; 4) ‘®åà ­ï¥â á⥪;
; 5) <20>®¤ª«îç ¥â áâà ­¨æë ¨§ ¢ë¤¥«¥­­®£® ¡«®ª ;
; 6) ‘âந⠯à¥ä¨ªá § ¯ã᪠ ¯à®£à ¬¬ë ¨ ãáâ ­ ¢«¨¢ ¥â ­  ­¥£® ॣ¨áâà IX;
; 7) ‘ç¨â뢠¥â ä ©« ¯®  ¤à¥áã 㪠§ ­­®¬ã ¢ ᬥ饭¨¨ 16 (€¤à¥á à á¯®«®¦¥­¨ï
; ª®¤  ¢ ¯ ¬ïâ¨);
; 8) ‡ ªà뢠¥â exe-ä ©«, ¥á«¨ íâ® ­¥ ¯¥à¢¨ç­ë© § £àã§ç¨ª;
; 9) “áâ ­ ¢«¨¢ ¥â á⥪ à ¢­ë¬ §­ ç¥­¨î ¨§ ᬥ饭¨ï 20 (€¤à¥á à á¯. á⥪ );
; 10) <20>¥à¥¤ ¥â ã¯à ¢«¥­¨¥ ¯®  ¤à¥áã 㪠§ ­­®¬ã ¢ ᬥ饭¨¨ 18 (€¤à¥á § ¯ã᪠);
;
; <20>à¥ä¨ªá § ¯ã᪠ ä ©« :
;
; -03 1 db ? ; „¥áªà¨¯â®à ä ©« , ¥á«¨ exe-ä ©« á ¯¥à¢¨ç­ë¬ § £àã§ç¨ª®¬
; -02 1 db ? ; ˆ¤¥­â¨ä¨ª â®à ¡«®ª  ¯ ¬ïâ¨
; -01 1 db ? ; “஢¥­ì ⥪ã饩 ¯à®£à ¬¬ë
; +00 1 db ? ; „«¨­  ª®¬-áâப¨
; +01 127 ds ? ; <20> à ¬¥âàë ª®¬-áâப¨, § ª ­ç¨¢ ¥âáï ­ã«¥¬
;///////////////////////////////////////////////////////////////////////
EXEC: LD (CMDLINE),HL
INC B ;R03
DEC B ;R03
JR Z,.VAR_1 ;R03
DEC B ;R03
JR Z,.VAR_2 ;R03
LD A,DSS_Error.sys.INVALID_FUNCTION ;R03
SCF ;R03
RET ;R03
;
.VAR_1: ;LD (CMDLINE),HL
CALL CHECKPATH ;CHECK FOR '\' - SHORT/FULL NAME
;LD HL,(CMDLINE)
JR C,EXEC0_SHORT
.VAR_2: CALL EXEC_1
LD A,DSS_Error.sys.FILE_NOT_FOUND
SCF
RET ; File not found - exit
; ¯à¨ ¢ë室¥ á ®è¨¡ª®©, ¢ ॣ¨áâॠ€ - ª®¤ ®è¨¡ª¨
EXEC_1: ;LD (CMDLINE),HL
LD HL,(CMDLINE)
LD A,FAT_ATTR.READ_ONLY
LD (OPEN_FN.TMP),A
CALL GETWORD
RET C
; LD HL,TMPNAME
; LD DE,MASKARE
CALL MASK
RET C
CALL TST_EXT
;LD A,DSS_Error.sys.FILE_NOT_FOUND
RET C
_mINCTASK ;R08
CALL OPEN_FN.FILE
JR C,.Error
POP HL ; 㡨ࠥ¬ «¨è­¨©  ¤à¥á_¢®§¢à â _¢_¢ë§¢ ¢èãî_¯à®æ¥¤ãàã
JP EXEC02 ;R07 CONTINUE EXECUTING PROGRAM
.Error: _mDECTASK ;R08
AND A
RET
;JR NC,.noError
;_mDECTASK ;R08
;AND A
;RET
;
;.noError:
;POP HL ; 㡨ࠥ¬ «¨è­¨©  ¤à¥á_¢®§¢à â _¢_¢ë§¢ ¢èãî_¯à®æ¥¤ãàã
;JP EXEC02 ;R07 CONTINUE EXECUTING PROGRAM
;
;SHORT NAME
;TRY TO FIND IN CURRENT DIRECTORY
EXEC0_SHORT: ; ¥á«¨ ã¡à âì, â® ¡ã¤¥â ª ª ¢ linux - ª®à®âª®¥ ¨¬ï § ¯ã᪠¥â EXE ⮫쪮 ¨§ ¯à®¯¨á ­­ëå ¤¨à¥ªâ®à¨©,
;   ¥á«¨ ­ã¦­® § ¯ãáâ¨âì ä ©« ¨§ ⥪ã饩 ¤¨à¥ªâ®à¨¨, â® â ª: ".\run.exe"
CALL EXEC_1
RET C
;
;FILE NOT FOUND, SEARCHING IN PATH
; GET PATH AND ETC.
LD HL,ENVPATH
LD DE,ENVPAGE.ENVTEMP
LD B,high Dss.Environ.Get
CALL ENVIRON
LD HL,(CMDLINE)
LD DE,CORE_BUFFERS.EXEBUFF
COPYEXN: LD A,(HL)
LDI
OR A
JR NZ,COPYEXN
CALL FINDPATH
;[x] 1/10/2023
LD A,DSS_Error.sys.FILE_NOT_FOUND
RET C
;
LD HL,(CMDLINE)
JR EXEC.VAR_2
;
EXEC02: LD (EXE_FM),A
LD HL,CORE_BUFFERS.EXEBUFF
LD DE,_sEXE_HEADER.UnUsedPoint ; #0080 ;!#0200(512) ;R02
LD A,(EXE_FM)
CALL READ
JP C,ERREXE
LD IX,CORE_BUFFERS.EXEBUFF
LD HL,(CORE_BUFFERS.EXEBUFF.EXE_EXT)
LD DE,'E'+'X'*256
;AND A - ­¥ ­ã¦­®, ¥á«¨ ¡ë ¡ë« CF=1, â® çãâì ¢ëè¥ ¬ë ¡ë ã諨 ­  JP C,ERREXE
SBC HL,DE
LD A,DSS_Error.sys.INVALID_EXE
SCF
JP NZ,ERREXE
;!TEST
;LD A,(CORE_BUFFERS.EXEBUFF.VERSION)
;OR A
;LD A,DSS_Error.sys.UNKNOWN_EXE
;SCF
;JP NZ,ERREXE
LD A,MINIMUM_EXE_VERSION
CP (IX + _sEXE_HEADER.VERSION)
LD A,DSS_Error.sys.UNKNOWN_EXE
JP C,ERREXE
;
;
LD DE,(CORE_BUFFERS.EXEBUFF.LOADER)
LD A,E
OR D
JP NZ,PRELOAD
; A=0
LD H,A
LD L,A
LD XL,A
LD XH,A
;
LD B,high Dss.Move_FP.FrEnd
LD A,(EXE_FM)
CALL MOVE_FP
LD DE,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD A,D
AND #3F
LD D,A
ADD IX,DE
;!TEST
JR NC,.no_inc_hl
INC HL
;LD DE,#0000
;ADC HL,DE
;
.no_inc_hl: LD A,XH
SLA A
RL L
RL H
SLA A
RL L
RL H
OR XL
JR Z,.NOINK
INC HL
.NOINK: LD A,H
OR A
JP NZ,ERREXE0
LD B,L
LD HL,.RET_1
LD (_ret),HL
JP _TST_PROC
;
.RET_1: LD DE,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
XOR A
LD H,A
LD L,A
SBC HL,DE
EX DE,HL ; de=ç¨á«® ç¨â. ¡ ©â
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR) ; ¡ãä¥à
LD A,(EXE_FM) ; ¤¥áªà. ä ©« 
CALL READ ; ç⥭¨¥ ¨§ ä ©« 
;!TEST ;[x] no close source EXE file before start 08/11/23
; LD A,(EXE_FM) ; ¤¥áªà. ä ©« 
; CALL CLOSE ; § ªàëâì ä ©«
;
JP _TST_PROC_2
;
RETFAR: LD B,DSS_Error.sys.UNEXPECTED_APP_TRMN
JP LEAVE ; § ¢¥àè¨âì ¯à®£à ¬¬ã (¯à®æ¥áá)
;-------------------------------------------------
; …᫨ à áè. ä ©«  ­¥ § ¤ ­®, § ¤ âì "exe".
; …᫨ à áè. ä ©«  § ¤ ­®, áà ¢­¨âì ¥£® á "exe".
;-------------------------------------------------
TST_EXT: LD HL,EXE_EXT ; "EXE"
LD DE,MASKARE+8
LD B,3
LD A,(DE)
CP ' '
JR NZ,.loop ; § ¤ ­® à áè.
LDI
LDI
LDI
XOR A
RET
; áà ¢­¨âì à áè. á "EXE"
.loop: LD A,(DE)
CP (HL)
SCF
RET NZ ; ­¥ ᮢ¯ ¤ ¥â
INC HL
INC DE
DJNZ .loop
XOR A ; Ok
RET
;
ERREXE0: LD A,DSS_Error.sys.NOT_ENOUGH_MEMORY
ERREXE: PUSH AF
LD A,(EXE_FM)
CALL CLOSE_FN
_mDECTASK
POP AF
RET
;!TODO áà ¢­¨âì á EXEC02
PRELOAD: EX DE,HL
LD DE,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD A,D
AND #3F
LD D,A
ADD HL,DE
XOR A
SLA H
RLA
SLA H
RLA
LD B,A
LD A,H
OR L
JR Z,NOINK2
INC B
NOINK2: LD HL,_RET_2
LD (_ret),HL
JR _TST_PROC
;
_RET_2: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR) ; ¡ãä¥à
LD DE,(CORE_BUFFERS.EXEBUFF.LOADER) ; ç¨á«® ç¨â. ¡ ©â
LD A,(EXE_FM) ; ¤¥áªà. ä ©« 
CALL READ ; ç⥭¨¥ ¨§ ä ©« 
JP _TST_PROC_2
;-------------------------------------------------------------------;[ ]
_TST_PROC: CALL GETMEM
JP C,ERREXE0
LD (EXE_MEM),A
EXX
POP DE ;á­¨¬ ¥¬ á® á⥪   ¤à¥á ¢®§¢à â 
LD HL,#0000
ADD HL,SP
LD SP,(EXSTACK)
; ! „ «¥¥ á⥪ ¢ ­ã«¥¢®© áâà ­¨æ¥! BIOS ¨ ­¥ DSS-MAIN ­¥ ¢ë§ë¢ âì
PUSH HL ; +2 EXSTACK size for 1 task
PUSH DE ; +2
;
IF OLD_DSS_FOR_OLD_EXE
; [ ] 10/06/24
LD A,(EXE_VERSION)
PUSH AF ; +2
;
ENDIF
;
IN A,(SLOT3)
LD D,A
IN A,(SLOT2)
LD E,A
IN A,(SLOT1)
PUSH DE ; +2
PUSH AF ; +2
LD (EXSTACK),SP
LD SP,HL
; ;
EXX
;
;!TEST 27/03/2024
LD DE,RAMMAP+3
LD A,(EXE_MEM)
LD BC,4*256 + BIOS.GetMemPage
.mem_loop: PUSH AF
PUSH BC
DEC B
RST ToBIOS
LD (DE),A
DEC DE
POP BC
POP AF
DJNZ .mem_loop
;
; LD DE,RAMMAP
; ;
; LD A,(EXE_MEM)
; LD BC,0*256 + BIOS.GetMemPage
; RST ToBIOS
; LD (DE),A
; INC DE
; ;
; LD A,(EXE_MEM)
; LD BC,1*256 + BIOS.GetMemPage
; RST ToBIOS
; LD (DE),A
; INC DE
; ;
; LD A,(EXE_MEM)
; LD BC,2*256 + BIOS.GetMemPage
; RST ToBIOS
; LD (DE),A
; INC DE
; ;
; LD A,(EXE_MEM)
; LD BC,3*256 + BIOS.GetMemPage
; RST ToBIOS
; LD (DE),A
;
;
LD HL,(CMDLINE)
LD DE,CORE_BUFFERS.SECTOR_BUFFER+1
CALL SCOPYS
LD A,#80 ;!HARDCODE cmd line size
SUB B
LD (CORE_BUFFERS.SECTOR_BUFFER),A
;
LD SP,CORE_BUFFERS.EXEBUFF + _sEXE_HEADER ;R02
; ! „ «¥¥ á⥪ ¢ ­ã«¥¢®© áâà ­¨æ¥! BIOS ¨ ­¥ DSS-MAIN ­¥ ¢ë§ë¢ âì
LD A,SHARED_PAGE
OUT (SLOT1),A
OUT (SLOT2),A
OUT (SLOT3),A
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD DE,RAMMAP
LD A,H
AND #C0
;!TEST
CP #80
JR Z,FR8000
JR NC,FRC000
;
FR4000: LD A,(DE)
OUT (SLOT1),A
INC DE
FR8000: LD A,(DE)
OUT (SLOT2),A
INC DE
FRC000: LD A,(DE)
OUT (SLOT3),A
CALL M_PSP
;
LD HL,(CORE_BUFFERS.EXEBUFF.OFFCOD2)
LD IX,(CORE_BUFFERS.EXEBUFF.OFFCOD1)
LD B,high Dss.Move_FP.FrStart
LD A,(EXE_FM)
CALL MOVE_FP
;
LD SP,#403F ;R02 ;!HARDCODE STACK before start EXE. “áâ ­ ¢«¨¢ ¥âáï ª®£¤  ¢®âª­ãâë SHARED_PAGE
_ret+1: JP 0
_TST_PROC_2: LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG)
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD DE,#0080 ;!HARDCODE CLP_Buffer
XOR A
SBC HL,DE
EX DE,HL
LD XH,D
LD XL,E
LD HL,(CORE_BUFFERS.EXEBUFF.PC_REG)
LD DE,RETFAR ;  ¤à¥á ¯/¯ "­¥®¦¨¤ ­­®¥ § ¢¥à襭¨¥ ¯à®æ¥áá "
PUSH DE
PUSH HL
;!TEST Current Dir ;[x] 15/10/23
PUSH IX
LD HL,CORE_BUFFERS.CurrentPath
LD A,(CORE_BUFFERS.EXEBUFF.VERSION)
;
IF OLD_DSS_FOR_OLD_EXE
; [ ] 10/06/24
LD (EXE_VERSION),A
;
ENDIF
OR A
JR NZ,.set_path
CALL DIR_PATH_CHANGE.FullCurrent
.set_path: CALL CHDIR_FN
POP IX
;
RET
;-----------------------------------------------------------------------
; ! ¢ë§ë¢ ¥âáï ª®£¤  á⥪ ¢ ­ã«¥¢®© áâà ­¨æ¥!
M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
DEC H
LD D,H
LD E,L
INC DE
LD BC,#00FF ;!HARDCODE
LD (HL),B
LDIR
EX DE,HL
DEC H
LD DE,#0080
ADD HL,DE
EX DE,HL
LD XH,D
LD XL,E
LD HL,CORE_BUFFERS.SECTOR_BUFFER
LD C,(HL)
INC C
LDIR
EX DE,HL ;R06
LD (HL),B
LD A,(TASK)
LD (IX-1),A
LD A,(EXE_MEM)
LD (IX-2),A
LD A,(EXE_FM)
LD (IX-3),A
;R05
INC HL
LD (HL),B
INC HL
;!FIXIT âãâ ¢®ááâ ­ ¢«¨¢ âì ¯à ¢¨«ì­ë© ª â «®£
CALL CURDISK
ADD A,'A'
LD (HL),A
INC HL
LD A,':'
LD (HL),A
INC HL
PUSH HL
CALL CURRDIR
;
POP HL
XOR A
LD BC,#0100 ;!FIXIT ­¥â ¯à¨¢ï§ª¨ ª CurrentDirectory.DEPTH
CPIR ;!FIXIT ­¥â ¯à®¢¥àª¨ ­  ¢ë室 ¯® BC=0
DEC HL
DEC HL
LD A,'\' ;
CP (HL)
INC HL
JR Z,.YP_ESLA
LD (HL),A
INC HL
.YP_ESLA: EX DE,HL
LD HL,TMPNAME
.loop: LD A,(HL)
LDI
CP ' '+1
JR NC,.loop
DEC DE
XOR A
LD (DE),A
LD (APPINFO.LAST_PSP_PTR),IX
;
RET
;
SCOPYS: LD BC,#80*256 + ' '+1 ;!HARDCODE cmd line size
.loop: LD A,(HL)
CP C
JR C,.copy
INC HL
DJNZ .loop
XOR A
LD (DE),A
LD B,#80
RET
;
.copy: LD BC,#80*256 + ' ' ;!HARDCODE cmd line size
.loop2: LD A,(HL)
LD (DE),A
INC HL
INC DE
CP C
RET C
DJNZ .loop2
RET
;---------------------------------------------------------------------
ENVPATH: DB "PATH=",0
EXE_EXT: DB "EXE"
TASK: DB #01 ; ã஢¥­ì ⥪ã饩 ¯à®£à ¬¬ë
;
IF OLD_DSS_FOR_OLD_EXE
EXE_VERSION: DB #01 ; [ ] 10/06/24
ENDIF
RAMMAP: DB #00,#00,#00,#00
ErrorLevel: DB #00 ; ª®¤ § ¢¥à襭¨ï ¯à®£à ¬¬ë (¯à®æ¥áá )
EXE_FM: DB #00 ; ¤¥áªà. ä ©« 
EXE_MEM: DB #00 ; ¨¤¥­â¨ä¨ª â®à ¡«®ª  ¯ ¬ïâ¨
CMDLINE: DW #0000
EXSTACK: DW CORE_BUFFERS.XSTACK.Spoint ;  ¤à¥á á⥪ 
;/////////////////////////////////////////////////////////////////////
;/////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #41. ‡ ¢¥àè¨âì ¯à®£à ¬¬ã (¯à®æ¥áá).
;
; ¢å®¤: B - ª®¤ § ¢¥à襭¨ï
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
;
; ‚ë室 ¨§ EXE-ä ©« :
;
; 1) Žá¢®¡®¦¤ îâáï ¢á¥ ¡«®ª¨ ¯ ¬ï⨠ª®â®àë¥ ¢ë¤¥«ï« áì ¤ ­­®¬ã ¯à¨«®¦¥­¨î.
; 2) ‚®ááâ ­ ¢«¨¢ îâáï áâà ­¨æë ª®â®àë¥ ¡ë«¨ ¯®¤ª«îç¥­ë ¤® § ¯ã᪠ EXE-ä ©« .
; 3) ‚ᯮ¬¨­ ¥âáï á⥪.
; 4) ॣ¨áâà A ¯®¬¥é ¥âáï ª®¤ ¢®§¢à â  ¨ ¢ë¯®«­ï¥âáï RET.
;
;/////////////////////////////////////////////////////////////////////
LEAVE: LD A,B
LD (ErrorLevel),A
CALL FREE_PROCESS_MEMORY
;[x] 10/12/23 close EXE FMs
CALL FREE_PROCESS_FMs
;
_mDECTASK
LD SP,(EXSTACK)
; âãâ á⥪ ¢ ­ã«¥¢®© áâà ­¨æ¥!
POP AF ; -2 EXSTACK size for 1 task
POP HL ; -2
OUT (SLOT1),A
LD A,L
OUT (SLOT2),A
LD A,H
OUT (SLOT3),A
; [ ] 10/06/24
IF OLD_DSS_FOR_OLD_EXE
POP AF ; -2
LD (EXE_VERSION),A
ENDIF
;
POP DE ; -2
POP HL ; -2
LD (EXSTACK),SP
LD SP,HL
;
;!TEST
;EI
;
EX DE,HL
LD A,(ErrorLevel)
;R12
CP DSS_Error.sys.UNEXPECTED_APP_TRMN
JR Z,.error_exit
CP DSS_Error.sys.USER_ABORT
JR NZ,.norm_exit
.error_exit: SCF
JP (HL)
;
.norm_exit: AND A
JP (HL)
;/////////////////////////////////////////////////////////////////////
;/////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #42. <20>®«ãç¨âì ª®¤ § ¢¥à襭¨ï ¯à®£à ¬¬ë.
;
; ¢å®¤: ­¥â
; ¢ë室: A - ª®¤ § ¢¥à襭¨ï
;/////////////////////////////////////////////////////////////////////
GET_ERR: LD A,(ErrorLevel)
AND A
RET
;/////////////////////////////////////////////////////////////////////
;-----------------------------------------------------------------------
FREE_PROCESS_MEMORY:
;LD HL,MEMTAB
LD HL,CORE_BUFFERS.MemoryTable ; ¬ áᨢ ᯨ᪠ ¢ë¤¥«. áâà ­¨æ
LD BC,256 ;!HARDCODE à §¬¥à ¡«®ª  áâà ­¨æ އ“
.loop: LD A,(TASK)
CPIR
RET NZ
PUSH HL
PUSH BC
DEC HL
AND A
;LD DE,MEMTAB
LD DE,CORE_BUFFERS.MemoryTable ; ¬ áᨢ ᯨ᪠ ¢ë¤¥«. áâà ­¨æ
SBC HL,DE
LD A,L
CALL RETMEM ; ®á¢®¡. ¡«®ª ¯ ¬ïâ¨
POP BC
POP HL
JP .loop
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
FREE_PROCESS_FMs:
LD IY,CORE_BUFFERS.FM_BUF - CORE_BUFFERS.FM_BUF.Size
LD DE,CORE_BUFFERS.FM_BUF.Size
LD B,FMCOUNT+1
LD A,(TASK)
.loop: ADD IY,DE
CP (IY+_sFM.TASK_NUM)
JR NZ,.next
; close fm
PUSH AF
XOR A
OR (IY+_sFM.TASK_NUM)
JR Z,.skip
PUSH IY
PUSH DE
LD A,FMCOUNT+1
SUB B
CALL CLOSE_FN
POP DE
POP IY
.skip: POP AF
;
.next: DJNZ .loop
RET
;
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
CHECKPATH: ; !TODO ᤥ« âì ¯à®¢¥àªã ­  ª®«¨ç¥á⢮ 横«®¢
LD A,(HL)
INC HL
CP '\'
RET Z
; CP '/' ;ALT SLASH
; RET Z
CP " "+1
JR NC,CHECKPATH
RET
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
FINDPATH:
SET_PAGE_X ENVPAGE
PUSH AF
;!TEST
;CALL CURRDSK_FN
;ADD A,"A"
;LD HL,TMP_CURDIR
;LD (HL),A
;INC HL
;LD A,":"
;LD (HL),A
;INC HL
;CALL CURRDIR_FN
;
CALL .MAKE_PATH_ARRAY
LD HL,ENVPAGE.PATH_PNT_ARRAY
.NEXTPATHI:
LD E,(HL)
INC HL
LD D,(HL)
INC HL
BIT ABSOLUTE_DIR,(HL)
INC HL
PUSH HL
PUSH BC
EX DE,HL
CALL Z,.GOTO_CURDIR
CALL NZ,CHDIR
JR C,.BADPATH
LD HL,CORE_BUFFERS.EXEBUFF
CALL MASK.name
JR C,.BADPATH
CALL TST_EXT
JR C,.BADPATH
CALL SEARCH.File
.BADPATH:
POP BC
POP HL
JR NC,.PATHFOUND
DJNZ .NEXTPATHI
SCF
.PATHFOUND:
POP BC
LD A,B
OUT (SLOT3),A
LD A,DSS_Error.sys.PATH_NOT_FOUND
RET
.GOTO_CURDIR:
PUSH AF
PUSH HL
LD HL,CORE_BUFFERS.CurrentDirectory
CALL CHDIR
POP HL
POP AF
RET
.MAKE_PATH_ARRAY:
LD HL,ENVPAGE.PATH_PNT_ARRAY-1 ;R04 -1
LD DE,ENVPAGE.ENVTEMP-1
LD B,#00
.NEXTAR:
LD (HL),C ;R04
INC HL ;R04
XOR A
LD (DE),A
LD C,A
INC DE
LD (HL),E
INC HL
LD (HL),D
INC HL
;R04 LD (HL),C
;R04 INC HL
INC B
.NEXTRT:
LD A,(DE)
CP '\'
JR NZ,.NEXTCH
.NEXTDR:
SET ABSOLUTE_DIR,C
.NEXTRL:
;SET RELATIVE_DIR,C ;!TODO ????
.NEXTCH:
LD A,(DE)
CP ";"
JR Z,.NEXTAR
INC DE
; CP "."
; JR Z,NEXTRL
CP ":"
JR Z,.NEXTRT
OR A
JR NZ,.NEXTCH
LD (HL),C ;R04
INC HL ;R04
LD (HL),A
INC HL
LD (HL),A
RET
;-----------------------------------------------------------------------
;R11 \\\\\\\\\\\\\\\\\\\\\\\\\\\\
;;
; 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
;R11 ////////////////////////////
;

View File

@ -0,0 +1,132 @@
////////////////////////////////////////////////////////////////////////
;‚室­ë¥ §­ ç¥­¨ï:
; C - #19
; HL - 㪠§ â¥«ì ­  ä ©«®¢ãî ᯥæ¨ä¨ª æ¨î
; DE - à ¡®ç¨© ¡ãä¥à 44 ¡ ©â , ¥á«¨ B=0, ¨­ ç¥ 256 ¡ ©â
; A -  âਡãâë, ¨á¯®«ì§ã¥¬ë¥ ¯à¨ ¯®¨áª¥
; B = #00 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ 11 ¡ ©â "FilenameExt"
; B = #01 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ DOS "filename.ext",0
; ¯®¨áª ¡¥§ ®£à ­¨ç¥­¨¥ ­  à §¬¥à ª â «®£ :
; !TODO B = #02 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ DOS + LFN
; !TODO B = #80 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ 11 ¡ ©â "FilenameExt"
; !TODO B = #81 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ DOS "filename.ext",0
;‚ë室­ë¥ §­ ç¥­¨ï:
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
////////////////////////////////////////////////////////////////////////
F_FIRST_FN: CALL F_FIRST.INIT_VARS
PUSH HL
;!TEST Current Dir ;[x] 15/10/23
; [ ] 10/06/24
IF OLD_DSS_FOR_OLD_EXE
LD A,(EXE_VERSION)
OR A
JR Z,.old_EXE
ENDIF
;
CALL DIR_PATH_CHECK
RET C
;
.old_EXE: POP HL
JR F_FIRST.begin
;
F_FIRST: CALL .INIT_VARS
.begin: CALL GETWORD
;CALL LOADDIR
RET C
CALL MASK
RET C
LD A,(.TMP)
CALL SEARCH.Custom
RET C
LD HL,MASKARE
.DTABUF+1:
LD DE,0
LD BC,11 ;!HARDCODE
LDIR
.TMP+1: LD A,0
LD (DE),A
.FIND_S:
INC DE
;!TODO «ãçè¥ âã⠨ᯮ«ì§®¢ âì ª ª ¢ record index ¤«ï ¯¥à¥¡®à  ª â «®£  > #4000 bytes
LD BC,FAT_DIRECTORY_RECORD
ADD IX,BC
LD (F_NEXT.CURHND),IX
LD HL,HANDBUF+12 ;!HARDCODE
LD BC,HANDBUF.SIZE-12 ;????? ¬¥âªã ¢¬¥áâ® ç¨á« ?
LDIR
LD A,(HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT)
LD (DE),A
INC DE
LD HL,HANDBUF
.FNDMODE+1:
LD A,0
OR A
JR NZ,.FIND_M2
LD BC,11 ;!HARDCODE
LDIR
.exit: LD A,F_NEXT.NO_NEXT.NO
LD (F_NEXT.NO_NEXT),A
XOR A
RET
.FIND_M2:
;!TODO LFN
;CP 2
;CALL NC,GetName_LFN
;CALL C,GetName
;
CALL GetName
JR .exit
;
.INIT_VARS:
LD (.TMP),A
LD (.DTABUF),DE
LD A,B
LD (.FNDMODE),A
RET
////////////////////////////////////////////////////////////////////////
;
;
////////////////////////////////////////////////////////////////////////
F_NEXT:
.NO_NEXT.YES EQU 0
.NO_NEXT.NO EQU #FF
.NO_NEXT+1:
LD A,0
OR A
LD A,DSS_Error.sys.INVALID_ACCESS
SCF
RET Z
LD (F_FIRST.DTABUF),DE
EX DE,HL
LD DE,MASKARE
LD BC,11 ;!HARDCODE
LDIR
XOR A ; F_NEXT.NO_NEXT.YES
LD (F_NEXT.NO_NEXT),A
LD A,(HL)
PUSH HL
CALL .NSEARCH
POP DE
RET C
JP F_FIRST.FIND_S
.NSEARCH:
EX AF,AF'
SET_PAGE_X DIRPAGE
;PUSH AF
EX AF,AF'
CPL
LD C,A
;!TEST 9/11/23 record index
; EXX
; LD DE,0
; EXX
;
.CURHND+2:
LD IX,0
LD A,XH
OR XL
JP Z,SEARCH.error_too_many_files
JP SEARCH.loop
;

View File

@ -0,0 +1,10 @@
//////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #3C. ˆ­ä®à¬ æ¨ï ® ¯ ¬ïâ¨.
;
; ¢å®¤: ­¥â
; ¢ë室: HL - ®¡é¥¥ ª®«-¢® áâà ­¨æ
; BC - ª®«-¢® ᢮¡. áâà ­¨æ
//////////////////////////////////////////////////////////////////////
FREEMEM: LD C,BIOS.GetMemSize
JP ToBIOS
;

View File

@ -0,0 +1,31 @@
//////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #43. ‚뤥«¨âì ¯ à ¬¥âà ª®¬ ­¤­®© áâப¨.
;
; ¢å®¤: HL - 㪠§ â¥«ì ª®¬ ­¤­®© áâப¨
; DE - ¡ãä¥à ¤«ï ¢ë¤¥«. ¯ à ¬¥âà 
; ¢ë室: HL - 㪠§ â¥«ì ­  á«¥¤. ¯ à ¬¥âà ª®¬-áâப¨
; CF=0 - ª®­¥æ áâப¨ ­¥ ¤®á⨣­ãâ (¥áâì ¤à㣨¥ ¯ à ¬¥âàë)
; CF=1 - ª®­¥æ áâப¨ (¢ ¡ãä¥à ¯¥à¥­¥áñ­ ¯®á«¥¤­¨© ¯ à ¬¥âà ¨«¨ ­®«ì)
;
;ENTRY: HL - COMMAND LINE
; DE - SWITCH BUFFER
;EXIT: BUFFER
//////////////////////////////////////////////////////////////////////
GSWITCH: XOR A
LD (DE),A
.loop1: LD A,(HL)
INC HL
CP " "
RET C
JR Z,.loop1
.loop2: LD (DE),A
LD A,(HL)
INC HL
INC DE
CP " "+1
JR NC,.loop2
CP " "
LD A,0
LD (DE),A
RET
;

View File

@ -0,0 +1,24 @@
////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #17. ˆ­ä®à¬ æ¨ï ® ¤ â¥ ¨ ¢à¥¬¥­¨ ä ©« .
;
; ¢å®¤: A - ¤¥áªà¨¯â®à ä ©« 
; ¢ë室: D - ¤¥­ì
; E - ¬¥áïæ
; IX - £®¤
; H - ç á
; L - ¬¨­ãâë
; B - ᥪ㭤ë
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
////////////////////////////////////////////////////////////////////////
GET_D_T:
CALL SET_FM
RET C
; ¢à¥¬ï/¤ âã ¨§ áâàãªâãàë ¤¥áªà.
LD E,(IY+_sFM.FS_REC.TIME) ; ¢à¥¬ï
LD D,(IY+_sFM.FS_REC.TIME+1) ;
LD C,(IY+_sFM.FS_REC.DATE) ; ¤ â 
LD B,(IY+_sFM.FS_REC.DATE+1) ;
CALL RMKTIME ; à áª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
AND A
RET
;

View File

@ -0,0 +1,21 @@
//////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #3D. ‚뤥«¥­¨¥ ¡«®ª  ¯ ¬ïâ¨.
;
; ¢å®¤: B - à §¬¥à ¡«®ª  ¢ áâà ­¨æ å ¯® 16kB
; ¢ë室: A - ¨¤¥­â¨ä¨ª â®à ¡«®ª  ¯ ¬ïâ¨, ¥á«¨ CF=0
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
//////////////////////////////////////////////////////////////////////
GETMEM: LD C,BIOS.GetMem
RST ToBIOS
LD E,A
LD A,DSS_Error.sys.NOT_ENOUGH_MEMORY
RET C
LD D,#00
;LD HL,MEMTAB ; ¬ áᨢ ᯨ᪠ ¢ë¤¥«. áâà ­¨æ
LD HL,CORE_BUFFERS.MemoryTable ; ¬ áᨢ ᯨ᪠ ¢ë¤¥«. áâà ­¨æ
ADD HL,DE
LD A,(TASK) ; ã஢¥­ì ⥪ã饩 ¯à®£à ¬¬ë
LD (HL),A
LD A,E
;AND A
RET

View File

@ -0,0 +1,14 @@
;[ ] 11/02/2024 - ”γ­<CEB3>ζ¨ο α ―®―®«­ο¥¬λ¬¨ ―®¤δγ­<CEB3>ζ¨ο¬¨)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; B = 1 ‚λ§®Ά δγ­<CEB3>樨 SETUP_CURSORS ¤«ο Ά®ααβ ­®Ά«¥­¨ο α¨α⥬­λε θΰ¨δβ®Ά DSS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LIB_SUB:
DJNZ .B_2
; func B = 1
JP SETUP_CURSORS
;
.B_2: ; func B > 1 or 0
SCF
RET
;
;

View File

@ -0,0 +1,216 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #1B. ‘®§¤ ­¨¥ ª â «®£ .
;
; ¢å®¤: HL - 㪠§ â¥«ì ­  ¨¬ï ª â «®£ 
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
;
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
////////////////////////////////////////////////////////////////////////
MKDIR:
;error
.DIR_EXISTS: LD A,DSS_Error.sys.DIR_EXISTS
CCF
RET
;
; Entry point ;!TEST Current Dir ;[x] 15/10/23
.B: ; [ ] 10/06/24
IF OLD_DSS_FOR_OLD_EXE
LD A,(EXE_VERSION)
OR A
JR Z,.START
ENDIF
;
PUSH HL
CALL DIR_PATH_CHECK
POP HL
RET C
CALL .START
PUSH AF
LD HL,CORE_BUFFERS.CurrentDirectory
CALL CHDIR
POP AF
RET
;
.START: CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C
; [ ] 26/06/2024
CALL CHECK_64kb_CLUSTER
RET C
;
CALL MASK
RET C
;!TEST optimization à ­¥¥ GETWORD 㦥 § £à㧨« ¤¨à¥ªâ®à¨î
;CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£ 
;
CALL SEARCH.Dir ; ¯®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ¤¨áª 
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
; LD A,DSS_Error.sys.DIR_EXISTS
; CCF
; RET C ; ª â «®£ ­ ©¤¥­
JR NC,.DIR_EXISTS
CP DSS_Error.sys.FILE_NOT_FOUND
SCF
RET NZ
;
CALL G_CLUST
RET C
; fat32
PUSH HL ; ¬« ¤è¨© ­®¬¥à ᥪâ®à 
EXX
PUSH HL ; áâ à訩 ­®¬¥à ᥪâ®à 
EXX
;
XOR A ; 㬥­ìè¨âì
CALL SET_NEW_FREE_CLUSTERS ; [ ] free clusters for FSInfo
;
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
LD HL,MASKARE
LD DE,HANDBUF
LD BC,11
LDIR
EX DE,HL
LD A,FAT_ATTR.DIRECTORY ;  âਡãâ § ¯¨á¨ ª â «®£ 
; FAT_DIRECTORY_RECORD.ATTRIBUT
LD (HL),A
INC HL
LD BC,#0800 ; b=áç¥â稪
;
.loop1: LD (HL),C
INC HL
DJNZ .loop1
; FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H
; fat32 § ¯¨áì áâ à襣® ­®¬¥à  ª« áâ¥à  .FIRST_CLUSTER_H
POP DE
PUSH DE ; áâ à訩 ­®¬¥à ᥪâ®à 
LD (HL),E
INC HL
LD (HL),D
INC HL
;
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
; § ¯¨áì ¬« ¤è¥£® ­®¬¥à  ª« áâ¥à  .FIRST_CLUSTER_L
POP BC ; áâ à訩 ­®¬¥à ᥪâ®à 
POP DE ; ¬« ¤è¨© ­®¬¥à ᥪâ®à 
PUSH DE
PUSH BC
; FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L
LD (HL),E
INC HL
LD (HL),D
INC HL
; FAT_DIRECTORY_RECORD.F_SIZE
LD BC,#0400 ; b=áç¥â稪
.loop2: LD (HL),C
INC HL
DJNZ .loop2
;
CALL WRT_HND ; ᪮¯¨à. ­®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ )
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
;
; á®§¤ ñ¬ á«ã¦¥¡­ë¥ ª â «®£¨ "." ¨ ".." ¢ á®§¤ ­­®¬ ª â «®£¥
; Š€’€‹Žƒ "."
LD HL,CORE_BUFFERS.SECTOR_BUFFER ; ¡ãä¥à
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£ 
LD BC,10*256 + ' ' ; !HARDCODE b=áç¥â稪, c=¯à®¡¥«
;
.loop3: INC HL
LD (HL),C
DJNZ .loop3
; ᪮¯¨à®¢ âì ¡ ©âë 11..31 FAT_DIRECTORY_RECORD
INC HL
LD DE,HANDBUF+FAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©« 
EX DE,HL
LD BC,21 ; !HARDCODE
LDIR
; Š€’€‹Žƒ ".."
EX DE,HL
LD (HL),"." ; § ¯¨áì த¨â. ª â «®£ 
INC HL
LD (HL),"."
LD BC,9*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
.loop4: INC HL
LD (HL),C
DJNZ .loop4
;
INC HL
SET_PAGE_X DIRPAGE
PUSH AF
;
LD DE,DIRPAGE.buffer + FAT_DIRECTORY_RECORD.ATTRIBUT ;  âਡãâë § ¯¨á¨
;
LD A,(DIRPAGE.buffer)
CP "."
JR Z,.copy_dir_record
;
;LD IX,HANDBUF
XOR A
LD (HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),A
LD (HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1),A
LD (HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H),A
LD (HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1),A
LD DE,HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©« 
.copy_dir_record:
EX DE,HL
LD BC,HANDBUF.SIZE - FAT_DIRECTORY_RECORD.ATTRIBUT ; 21
LDIR
POP AF
OUT (SLOT3),A
;
EX DE,HL
LD D,H
LD E,L
INC DE
LD (HL),0
LD BC,512-65 ;!HARDCODE sector size
LDIR
;
POP HL ; áâ à訩 ­®¬¥à ᥪâ®à 
EXX
POP HL ; ¬« ¤è¨© ­®¬¥à ᥪâ®à 
CALL CLUSTER_TO_SECTOR
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster) ; ᥪâ®à®¢ ­  ª« áâ¥à
.MKD12: PUSH AF
PUSH HL ; áâ. à §àï¤
PUSH IX ; ­®¬¥à «®£. ᥪâ®à 
;
; IN A,(SLOT3)
; PUSH AF
; IN A,(SLOT0)
; OUT (SLOT3),A
; ;
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
; LD DE,CORE_BUFFERS.SECTOR_BUFFER+#C000
; LD BC,1*256 + Dss.DRV.Write
; RST ToDSS.DRV
; ;
; POP AF
; OUT (SLOT3),A
CALL WRITE_SECTOR
; !FIXIT ­¥â ¯à®¢¥àª¨ ­  ®è¨¡ªã
;
LD HL,CORE_BUFFERS.SECTOR_BUFFER
; [x] optimization
LD A,(HL)
OR A
JR Z,.skip_clean
;
LD DE,CORE_BUFFERS.SECTOR_BUFFER+1
LD BC,511 ;!HARDCODE sector size
LD (HL),0
LDIR
.skip_clean: ;
POP IX
POP HL
INC IX
LD A,XH
OR XL
JR NZ,.MKD11
INC HL
.MKD11 POP AF
DEC A
JR NZ,.MKD12
AND A
RET
;

View File

@ -0,0 +1,97 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #11. Žâªàë⨥ ä ©« .
;
; ¢å®¤: HL - 㪠§ â¥«ì ­  ¨¬ï ä ©« 
; A - ०¨¬ ¤®áâ㯠:
; A=0 ç⥭¨¥/§ ¯¨áì
; A=1 ç⥭¨¥
; A=2 § ¯¨áì
; ;!TODO A=3 § ¯¨áì ¡¥§ «¨è­¨å á®åà ­¥­¨© ªíè  FAT
; ;!TODO A=4 § ¯¨á âì ªíè FAT
; ¢ë室: CF=0, A - ¤¥áªà¨¯â®à ä ©« .
; CF=1, A - ª®¤ ®è¨¡ª¨.
////////////////////////////////////////////////////////////////////////
OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23
;AND #7F ; ACCESS_MODE bit7 - ¤«ï ¢­ãâ७­¥£® ¨á¯®«ì§®¢ ­¨ï))) ;!TODO
LD (.TMP),A
; [ ] 10/06/24
IF OLD_DSS_FOR_OLD_EXE
LD A,(EXE_VERSION)
OR A
JR Z,.old_EXE
ENDIF
;
PUSH HL
CALL DIR_PATH_CHECK.forceCheck
POP HL
RET C
.old_EXE: ;JR .start
;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir?
;R008 ;
.start: CALL GETWORD
RET C
CALL MASK
RET C
.FILE: CALL SEARCH.File ; enter point from EXEC, CREATE
RET C
;R002 ;!TEST 9/11/23 record index
.FM: PUSH DE ; á®å࠭塞 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS (¯®«ã祭 ¨§ SEARCH)
;
CALL GET_FM ; enter point from ATTRIB
RET C
LD A,C
EX AF,AF'
;!TEST 9/11/23 record index 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS
POP DE
; EXX
LD (IY+_sFM.HANDLE),E
LD (IY+_sFM.HANDLE+1),D
; EXX
;
LD D,YH
LD E,YL
LD HL,HANDBUF
LD BC,HANDBUF.SIZE
LDIR
.TMP+1: LD A,0
LD (IY+_sFM.ACCESS_MODE),A
LD A,(TASK)
LD (IY+_sFM.TASK_NUM),A
XOR A
LD (IY+_sFM.OptimizedClusters),A
LD (IY+_sFM.KnownCluster_L),A
LD (IY+_sFM.KnownCluster_L+1),A
LD (IY+_sFM.KnownOffset_L),A
LD (IY+_sFM.KnownOffset_L+1),A
; fat32
LD (IY+_sFM.KnownCluster_H),A
LD (IY+_sFM.KnownCluster_H+1),A
LD (IY+_sFM.KnownOffset_H),A
LD (IY+_sFM.KnownOffset_H+1),A
;
LD (IY+_sFM.F_POSITION),A
LD (IY+_sFM.F_POSITION+1),A
LD (IY+_sFM.F_POSITION+2),A
LD (IY+_sFM.F_POSITION+3),A
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
LD (IY+_sFM.DRIVE),A
; fat32
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_H
LD E,(HL)
INC HL
LD D,(HL)
LD (IY+_sFM.DIR_CLUSTER_H),E
LD (IY+_sFM.DIR_CLUSTER_H+1),D
;
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_L ; work directory FM
LD E,(HL)
INC HL
LD D,(HL)
LD (IY+_sFM.DIR_CLUSTER_L),E
LD (IY+_sFM.DIR_CLUSTER_L+1),D
;
EX AF,AF'
AND A
RET
;

View File

@ -0,0 +1,74 @@
;///////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #5F. ‚뢮¤ ᨬ¢®«  ­  ¯à¨­â¥à ¡¥§ ®¦¨¤ ­¨ï.
;
; ˆ­â¥à¯à¥â æ¨ï ¡ ©â  á®áâ®ï­¨ï ¯à¨­â¥à :
; 0..2 - ­¥ ¨á¯®«ì§ãîâáï, ®¡ëç­® ãáâ. ¢ "1"
; 3 - ®è¨¡ª  ¯à¨­â¥à  - ¥áâì/­¥â (1/0)
; 4 - ¯à¨­â¥à ¯®¤ª«î祭/­¥ ¯®¤ª«î祭 (1/0)
; 5 - ¡ã¬ £¨ ­¥â/¥áâì (1/0)
; 6 - ¯à¨­â¥à £®â®¢/¢ë¢®¤¨â ®ç¥à¥¤­®© ᨬ¢®« (1/0)
; 7 - ¯à¨­â¥à ᢮¡®¤¥­/§ ­ïâ (1/0)
;
; ¢å®¤: A - ᨬ¢®«
; ¢ë室: B - ᨬ¢®«
; CF - ®è¨¡ª , A=¡ ©â á®áâ®ï­¨ï (¡¨âë 7..3)
;///////////////////////////////////////////////////////////////////////
Z84_SP:
.LPT_A EQU Z84.SIO.Ch_B.Ctrl
.LPT_B EQU Z84.PIO.Port_A.Data
.LPT1_C EQU Z84.PIO.Port_A.Command
.LPT2_D EQU Z84.PIO.Port_B.Data
.LPT2_C EQU Z84.PIO.Port_B.Command
;
PRINT: AND A
LD B,A ; á®å࠭塞 ᨬ¢®«
;
LD A,R
DI
PUSH AF
; reg 0
XOR A
OUT (Z84_SP.LPT_A),A
LD A,%0001'0000 ; Reset EXT/STATUS interrupts
OUT (Z84_SP.LPT_A),A
XOR A
OUT (Z84_SP.LPT_A),A
IN A,(Z84_SP.LPT_A) ; IN (1Bh): bit 5 - busy, Bit 3 - Ack
LD C,A
BIT 5,A ; IN (19h): bit 5 - Paper Enable, Bit 3 - Select
JR NZ,.LPTBUSY
AND %11011000
JR Z,.LPTBUSY
LD A,B ; ¢®ááâ ­ ¢«¨¢ ¥¬ ᨬ¢®«
OUT (Z84_SP.LPT_B),A
POP AF
RET PO
EI
RET
;
.LPTBUSY: POP AF
LD A,C
SCF
RET PO
EI
RET
; ; ;
; B - SYMBOL
; CF = 1 - PRINTER BUSY
PRINT_INIT: DI
LD A,#CF
; port #1F ⮫쪮 ç¥p¥§ LD BC,1F : Out (BC),reg (¢  «ìâ¥à¥ ¨¤ñâ ¯¥à¥å¢ â í⮣® ¯®àâ  ¯à®æ , ¥á«¨ ®­ ¢ ª®¬ ­¤¥ ® 㪠§ ­)
LD BC,Z84_SP.LPT2_C
OUT (C),A
;[x] 29/9/23
;LD A,#63
LD A,63
;
OUT (C),A
LD A,#C0 ; Bit 7 - Select (1), Bit 6 - Auto_Line_Feed (1)
OUT (Z84_SP.LPT2_D),A
LD A,#0F ; Init printer port for Out
OUT (Z84_SP.LPT1_C),A
RET
;///////////////////////////////////////////////////////////////////////

View File

@ -0,0 +1,171 @@
; HL - BUFFER ADDRESS
; DE - BLOCK SIZE
; A - FM
READ: LD (.R_POINT),HL
LD (.S_POINT),HL
CALL SET_FM
RET C
CALL .TEST_SIZE
;
LD A,D
OR E
JP Z,.NOREAD
;
PUSH DE
LD A,(IY+_sFM.DRIVE)
CALL OPENDSK
JP C,.ERR_1
CALL GET_OFFSET_IN_SECTORS
;
JP NZ,.ROV1
.ROV4: POP BC
PUSH BC
SRL B
JR Z,.ROV2
LD (.SECTORH),HL
LD (.SECTORL),DE
.R_POINT+2: LD IX,0
CALL BLOCK_READ
JP C,.ERR_1
LD DE,(.R_POINT)
.PointerOnBuffer+1:
LD HL,0 // LD HL,(READMEM)
AND A
SBC HL,DE
LD C,H
LD B,0
ADD HL,DE
LD (.R_POINT),HL
SRL C
.SECTORL+1: LD HL,0 // LD HL,(SECTORL)
ADD HL,BC
EX DE,HL
.SECTORH+1: LD HL,0 // LD HL,(SECTORH)
LD C,B
ADC HL,BC
.ROV2: POP BC
LD A,B
AND #01
LD B,A
OR C
JP Z,.ROV6
PUSH BC
LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOCK_READ
POP BC
LD C,SLOT3
OUT (C),B
JP C,.ERR_1
LD HL,CORE_BUFFERS.BUFFER
LD DE,(.R_POINT)
POP BC
LDIR
LD (.R_POINT),DE
.ROV6: LD HL,(.R_POINT)
.S_POINT+1: LD DE,0
;EX DE,HL
AND A
SBC HL,DE
PUSH HL
EX DE,HL
LD XH,D
LD XL,E
LD HL,0
CALL MOVE_FP.F_current
POP DE
.NOREAD: ;
.COD+1: LD A,0
OR A
RET
;
.ROV1: PUSH BC
PUSH HL
PUSH DE
LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOCK_READ
POP BC
LD C,SLOT3
OUT (C),B
POP HL
JP C,.ERR_3
; inc HL:DE
LD BC,1
ADD HL,BC
EX DE,HL
POP HL
LD C,B
ADC HL,BC
;
EXX
POP DE
LD HL,512 ;!HARDCODE sector size!
AND A
SBC HL,DE
LD B,H
LD C,L
POP HL
AND A
SBC HL,BC
JR NC,.ROV3
ADD HL,BC
LD B,H
LD C,L
LD HL,0 ;!TODO ¬®¦­® âãâ ã¯à®áâ¨âì ¤ «ì­¥©èãî ¢¥âªã?
.ROV3: PUSH HL
LD HL,CORE_BUFFERS.BUFFER
ADD HL,DE
LD DE,(.R_POINT)
LDIR
LD (.R_POINT),DE
EXX
JP .ROV4
;
.ERR_3: POP HL
POP HL
.ERR_1: POP BC
;SCF
RET
;
.TEST_SIZE: XOR A
LD (READ.COD),A
LD L,(IY+_sFM.F_POSITION) ;FP LOW
LD H,(IY+_sFM.F_POSITION+1)
ADD HL,DE
;
EXX
;LD DE,0 ;!TEST
LD L,(IY+_sFM.F_POSITION+2) ;FP HIGH
LD H,(IY+_sFM.F_POSITION+3)
;!TEST
JR NC,.no_inc_hl
INC HL
;ADC HL,DE
;
.no_inc_hl: EXX ;HL':HL - NEW FP
;
LD C,(IY+_sFM.FS_REC.F_SIZE)
LD B,(IY+_sFM.FS_REC.F_SIZE+1) ;SIZE LOW
AND A
SBC HL,BC
EXX
LD C,(IY+_sFM.FS_REC.F_SIZE+2) ;SIZE HIGH
LD B,(IY+_sFM.FS_REC.F_SIZE+3)
SBC HL,BC
EXX
RET C ;OK READ ALL
EX DE,HL
SBC HL,DE ;VERY BIG
EX DE,HL
LD A,#FF
LD (READ.COD),A
RET

View File

@ -0,0 +1,93 @@
////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #10. <20>¥à¥¨¬¥­®¢ ­¨¥ ä ©« .
; ƒ«®¡ «ì­ë¥ ᨬ¢®«ë * ¨ ? ¢ ¨¬¥­ å ä ©«®¢ ­¥ ¤®¯ã᪠îâáï.
;
; ¢å®¤: HL - 㪠§ â¥«ì ­  áâ à®¥ ¨¬ï ä ©« 
; DE - 㪠§ â¥«ì ­  ­®¢®¥ ¨¬ï ä ©« 
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
;
; INPUT: HL - "old_name.ext",#00 without simbols * ?
; DE - "new_name.ext",#00 without simbols * ?
////////////////////////////////////////////////////////////////////////
RENAME: ;!TEST Current Dir ;[x] 15/10/23
; [ ] 10/06/24
IF OLD_DSS_FOR_OLD_EXE
LD A,(EXE_VERSION)
OR A
JR Z,.old_EXE
ENDIF
;
PUSH HL
PUSH DE
CALL DIR_PATH_CHECK.forceCheck
POP DE
POP HL
RET C
;
.old_EXE: ;
; !TODO ¢®âª­ãâì âãâ GETWORD, ç⮡ ¬®¦­® ¡ë«® 㤠«ïâì ¯® ®â­®á¨â¥«ì­ë¬ ¯ãâï¬?
;
; [ ] 26/06/2024
PUSH HL
CALL CHECK_64kb_CLUSTER
POP HL
RET C
;
PUSH DE
CALL MASK.name
POP DE
RET C
;!TEST optimization
;LD HL,MASKARE
;LD BC,11
;LD A,"?"
;CPIR
;LD A,DSS_Error.sys.INVALID_NAME
;SCF
CALL CHECK_NAME
;
RET Z
PUSH DE
CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£ 
;LD A,#33
LD A,FAT_ATTR.NoSYSnoVolID
CALL SEARCH.Custom ; ¯®¨áª § ¯¨á¨ ¢ ᯨ᪥ ¤¨áª 
POP HL
RET C
;LD DE,MASKARE
CALL MASK.name
RET C
;!TEST optimization
;LD HL,MASKARE
;LD BC,11
;LD A,"?"
;CPIR
;LD A,DSS_Error.sys.INVALID_NAME
;SCF
CALL CHECK_NAME
;
RET Z
PUSH IX
LD A,FAT_ATTR.NoSYSnoVolID
CALL SEARCH.Custom ; ¯®¨áª § ¯¨á¨ ¢ ᯨ᪥ ¤¨áª 
POP IX
LD A,DSS_Error.sys.FILE_EXISTS
CCF
RET C
SET_PAGE_X DIRPAGE
EX AF,AF'
;
LD HL,MASKARE
LD D,XH
LD E,XL
LD BC,11
LDIR
;
CALL DELETE_LFN_RECORDS ; [ ] 㤠«¥­¨¥ § ¯¨á¨ LFN
;
EX AF,AF'
OUT (SLOT3),A
JP SAVEDIR
; ; ;

View File

@ -0,0 +1,29 @@
//////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #3E. Žá¢®¡®¦¤¥­¨¥ ¡«®ª  ¯ ¬ïâ¨.
;
; ¢å®¤: A - ¨¤¥­â¨ä¨ª â®à ¡«®ª  ¯ ¬ïâ¨
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
//////////////////////////////////////////////////////////////////////
RETMEM: LD E,A
LD D,#00
;LD HL,MEMTAB ; ¬ áᨢ ᯨ᪠ ¢ë¤¥«. áâà ­¨æ
LD HL,CORE_BUFFERS.MemoryTable ; ¬ áᨢ ᯨ᪠ ¢ë¤¥«. áâà ­¨æ
ADD HL,DE
LD A,(TASK) ; ã஢¥­ì ⥪ã饩 ¯à®£à ¬¬ë
CP (HL)
LD A,DSS_Error.sys.INVALID_MEMORY_HND
SCF
RET NZ
;PUSH DE
LD A,E
LD C,BIOS.FreeMem
RST ToBIOS
;POP DE
LD A,DSS_Error.sys.INVALID_MEMORY_HND
RET C
;LD HL,MEMTAB
LD HL,CORE_BUFFERS.MemoryTable
ADD HL,DE
XOR A
LD (HL),A
RET

View File

@ -0,0 +1,147 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #1C. “¤ «¥­¨¥ ª â «®£ .
; Œ®¦­® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
;
; ¢å®¤: HL - 㪠§ â¥«ì ­  ¨¬ï ª â «®£ 
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
;
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
////////////////////////////////////////////////////////////////////////
RMDIR: ;!TEST Current Dir ;[x] 15/10/23
; [ ] 10/06/24
IF OLD_DSS_FOR_OLD_EXE
LD A,(EXE_VERSION)
OR A
JR Z,.START
ENDIF
;
PUSH HL
CALL DIR_PATH_CHECK
POP HL
RET C
CALL .START
PUSH AF
LD HL,CORE_BUFFERS.CurrentDirectory
CALL CHDIR
CALL DIR_PATH_CHANGE.Current
POP AF
RET
;
.START: CALL GETWORD
RET C
; [ ] 26/06/2024
CALL CHECK_64kb_CLUSTER
RET C
;
CALL MASK
RET C
;!TEST optimization
;LD HL,MASKARE
;LD BC,11
;LD A,"?"
;CPIR
;LD A,DSS_Error.sys.INVALID_NAME
;SCF
CALL CHECK_NAME
;
RET Z
CALL LOADDIR
CALL SEARCH.Dir
RET C
; fat32
LD HL,(HANDBUF+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
EXX
LD HL,(HANDBUF+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
PUSH IX ;!TODO record index. ¢®§¬®¦­®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ­¨æë
;
;!TODO <20>à®æ¥¤ãà  ¯®«­®£® ¢ëç¨â뢠­¨ï ª â «®£  (¢á¥ ª« áâ¥àë). Œ®¦­® § ¤¥©á⢮¢ âì ¢ ¤àã£¨å ¬¥áâ å
.read_dir_big_loop:
PUSH HL
EXX
PUSH HL
EXX
CALL CLUSTER_TO_SECTOR
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
LD B,A
; ­ ç¨­ ¥¬ ¢ëç¨â뢠âì ᮤ¥à¦¨¬®¥ ª â «®£  ¯®á¥ªâ®à­®
.read_dir_loop: ;PUSH AF
PUSH BC
PUSH HL
PUSH IX
;
; IN A,(SLOT3)
; PUSH AF
; IN A,(SLOT0)
; OUT (SLOT3),A
; ;
; LD DE,CORE_BUFFERS.SECTOR_BUFFER+#C000
; LD BC,1*256 + Dss.DRV.Read
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
; RST ToDSS.DRV
; POP AF
; OUT (SLOT3),A
CALL READ_SECTOR
; !FIXIT ­¥â ¯à®¢¥àª¨ ­  ®è¨¡ªã
;
;!HARDCODE 16 * 32 = 512; 32 - à §¬¥à § ¯¨á¨, 512 - à §¬¥à áç¨â ­­®£® ᥪâ®à 
LD B,16
LD HL,CORE_BUFFERS.SECTOR_BUFFER
.check_dir_loop:
LD A,(HL)
OR A
JP Z,.dir_empty
CP "."
JR Z,.next_record
CP #E5 ;!HARDCODE ¡ ©â 㤠«¥­¨ï ä ©« 
JR Z,.next_record
LD DE,FAT_DIRECTORY_RECORD.ATTRIBUT ; ᬥé. ¤® ¡ ©â   âਡã⮢
ADD HL,DE
LD A,(HL)
SBC HL,DE
AND FAT_ATTR.VOLUME_ID
SCF
JP Z,.error ;DIR NOT EMPTY
.next_record: LD DE,FAT_DIRECTORY_RECORD
ADD HL,DE
DJNZ .check_dir_loop
;
POP IX
POP HL
INC IX
LD A,XH
OR XL
JR NZ,.no_inc_hl
INC HL
.no_inc_hl: ; POP AF
; DEC A
; JR NZ,.read_dir_loop
POP BC
DJNZ .read_dir_loop
; fat32
EXX
POP HL ; ­®¬¥à ª« áâ¥à 
EXX
POP HL ; ­®¬¥à ª« áâ¥à 
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
EX DE,HL ; hl=­®¬¥à á«¥¤. ª« áâ¥à 
EXX
EX DE,HL ; hl=­®¬¥à á«¥¤. ª« áâ¥à 
EXX
JR NC,.read_dir_big_loop ; ­¥ ª®­¥æ 楯®çª¨
;
.delete: POP IX
JP DELETE_REC_FAT ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥­­ ï"
;
.dir_empty: ; CF = 0
.error: ; CF = 1
POP HL
POP HL
POP HL
POP HL
POP HL
JR NC,.delete
POP HL
LD A,DSS_Error.sys.DIR_NOT_EMPTY
RET
;

Some files were not shown because too many files have changed in this diff Show More