First init
164
Crazy BIOS/BIOS.asm
Normal 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
@ -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
|
||||
;[--------------------------------------------------------------------------]
|
||||
;
|
||||
766
Crazy BIOS/exp/BIOS_FUNC.asm
Normal 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
@ -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
847
Crazy BIOS/exp/EXTENDED/FDD_DRIVER_2.asm
Normal 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
|
||||
;[]===========================================================[]
|
||||
401
Crazy BIOS/exp/EXTENDED/IDE/CD_DRV.ASM
Normal 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
|
||||
;
|
||||
663
Crazy BIOS/exp/EXTENDED/IDE/HDD_DRV.ASM
Normal 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]
|
||||
100
Crazy BIOS/exp/EXTENDED/IDE/shared.asm
Normal 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
|
||||
189
Crazy BIOS/exp/EXTENDED/RAM_DISK_DRIVER_1.asm
Normal 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
@ -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
@ -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
@ -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
@ -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, $
|
||||
;
|
||||
113
Crazy BIOS/exp/FUNC_CMOS.ASM
Normal 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
|
||||
155
Crazy BIOS/exp/FUNC_FOR_TRDOS.ASM
Normal 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
|
||||
;
|
||||
1914
Crazy BIOS/exp/FUNC_LOW_PRINT.ASM
Normal file
512
Crazy BIOS/exp/FUNC_PIC.ASM
Normal 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
|
||||
|
||||
;************************************
|
||||
;
|
||||
|
||||
|
||||
1118
Crazy BIOS/exp/FUNC_RAM_ROM_DRV.ASM
Normal file
444
Crazy BIOS/exp/FUNC_SERVICE.asm
Normal 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
@ -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
|
||||
;----------------------------------------------------------------------;
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
5
Crazy BIOS/loader/bitstream_header.inc
Normal 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
|
||||
;
|
||||
169
Crazy BIOS/loader/loader.asm
Normal 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
|
||||
;
|
||||
BIN
Crazy BIOS/logo/Projects/LOGO.PAK
Normal file
BIN
Crazy BIOS/logo/Projects/LOGO.bmp
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
Crazy BIOS/logo/Projects/MAIN.xcf
Normal file
BIN
Crazy BIOS/logo/Projects/NY_Kokoshnik.PAK
Normal file
BIN
Crazy BIOS/logo/Projects/NY_Kokoshnik.bmp
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
Crazy BIOS/logo/Projects/NY_mustache.PAK
Normal file
BIN
Crazy BIOS/logo/Projects/NY_mustache.bmp
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
Crazy BIOS/logo/Projects/test.png
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
199
Crazy BIOS/logo/Set_Pictures.asm
Normal 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
|
||||
4
Crazy BIOS/logo/clean.cmd
Normal file
@ -0,0 +1,4 @@
|
||||
@echo off
|
||||
del *.bin /s
|
||||
del *.lst /s
|
||||
del *.log /s
|
||||
4
Crazy BIOS/logo/compile.log
Normal 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
@ -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
|
After Width: | Height: | Size: 10 KiB |
BIN
Crazy BIOS/logo/pfathers.bmp
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
Crazy BIOS/logo/psclean.bmp
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
Crazy BIOS/logo/psfathers.bmp
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
Crazy BIOS/logo/use/LOGO.bmp
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
Crazy BIOS/logo/use/NY_Kokoshnik.bmp
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
1
Crazy BIOS/logo/use/NY_Kokoshnik_DAT.BIN
Normal 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>y¡׀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ו~׳7־›µֱ‘ְְ~™\\־÷~¢<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׳Kּˆ<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>¹ְ־~y›yT<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’ױ־¸ױ׳±¸n־›<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>
|
||||
BIN
Crazy BIOS/logo/use/NY_mustache.bmp
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
1
Crazy BIOS/logo/use/NY_mustache_DAT.BIN
Normal 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>
|
||||
16
Crazy BIOS/logo/use/New_Year.inc
Normal 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
@ -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
@ -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
|
||||
71
Crazy BIOS/rom/MEM_MAP.inc
Normal 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
@ -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
|
||||
;
|
||||
916
Crazy BIOS/rom/SETUP/AUTOIDE.asm
Normal 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
|
||||
;
|
||||
242
Crazy BIOS/rom/SETUP/DEHRUST.asm
Normal 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'
|
||||
;---------------------------------------
|
||||
;
|
||||
48
Crazy BIOS/rom/SETUP/IM2_INT.asm
Normal 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
|
||||
;
|
||||
794
Crazy BIOS/rom/SETUP/KEY.asm
Normal 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
|
||||
;
|
||||
1754
Crazy BIOS/rom/SETUP/MAIN.asm
Normal file
1096
Crazy BIOS/rom/SETUP/SETTINGS.asm
Normal file
548
Crazy BIOS/rom/SETUP/VIDEO_IO.asm
Normal 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'
|
||||
;
|
||||
840
Crazy BIOS/rom/SETUP/messages.z80
Normal 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"
|
||||
;
|
||||
245
Crazy BIOS/rom/ZX/ZX_FUNC.ASM
Normal 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
|
||||
;
|
||||
747
Crazy BIOS/rom/ZX/ZX_MENU.ASM
Normal 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
|
||||
;
|
||||
1518
Crazy BIOS/rom/_not_used/CrazyBlaster.asm
Normal file
41
Crazy BIOS/rom/_not_used/EasterSprites.asm
Normal 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
|
||||
157
Crazy BIOS/rom/_not_used/LZ4_DEC.asm
Normal 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
|
||||
89
Crazy BIOS/rom/_not_used/Logo_Depacker.asm
Normal 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'
|
||||
178
Crazy BIOS/shared/CompMacro.asm
Normal 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
|
||||
;
|
||||
25
Crazy BIOS/shared/DEFINES.INC
Normal 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
42
Crazy BIOS/shared/VERSION.inc
Normal 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'
|
||||
;---------------------------------------
|
||||
19
Crazy BIOS/shared/includes.inc
Normal 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'
|
||||
;---------------------------------------
|
||||
;
|
||||
1309
Crazy Estex DSS/BOOT/DSSBOOT.ASM
Normal file
9
Crazy Estex DSS/BOOT/README.TXT
Normal file
@ -0,0 +1,9 @@
|
||||
<EFBFBD>à®£à ¬¬ § ¯¨á¨ FDD/HDD boot-§ £àã§ç¨ª ¨ ä ©«®¢ á¨á⥬ë.
|
||||
|
||||
”¨âç¨ ¯à®£à ¬¬ë:
|
||||
- ‚ ®â«¨ç¨¥ ®â ®à¨£¨ «ì®£® boot-¨áâ ««ïâ®à , íâ ¬®¦¥â
|
||||
¯¥à¥¯¨áë¢ âì 㦥 ãáâ ®¢«¥ë© boot-§ £àã§ç¨ª.
|
||||
- ” ©«ë á¨á⥬ë (system.dos, system.exe) ¬®£ãâ ¨¬¥âì
|
||||
«î¡ë¥ à §¬¥àë.
|
||||
- <20>ਠ§ £à㧪¥ ª®¬¯ìîâ¥à á ¤¨áª¥âë, § ¯à 訢 ¥âáï ®¢ ï
|
||||
¤¨áª¥â ¤«ï á®§¤ ¨ï ¨§ ¥¥ § £à㧮箩.
|
||||
914
Crazy Estex DSS/BOOT/boot.asm
Normal 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
@ -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
|
||||
;
|
||||
101
Crazy Estex DSS/DSS/API/AppInfo.asm
Normal 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
|
||||
;
|
||||
102
Crazy Estex DSS/DSS/API/Attribute.asm
Normal 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
|
||||
73
Crazy Estex DSS/DSS/API/BootDsk.asm
Normal 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
|
||||
;
|
||||
44
Crazy Estex DSS/DSS/API/ChDir.asm
Normal 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
|
||||
;
|
||||
24
Crazy Estex DSS/DSS/API/ChnDisk.asm
Normal 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
|
||||
;
|
||||
86
Crazy Estex DSS/DSS/API/Close.asm
Normal 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
|
||||
;
|
||||
121
Crazy Estex DSS/DSS/API/Create.asm
Normal 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
|
||||
;
|
||||
30
Crazy Estex DSS/DSS/API/CurDisk.asm
Normal 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
|
||||
;
|
||||
24
Crazy Estex DSS/DSS/API/CurrDir.asm
Normal 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
|
||||
;
|
||||
;
|
||||
43
Crazy Estex DSS/DSS/API/Delete.asm
Normal 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 ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||
;
|
||||
260
Crazy Estex DSS/DSS/API/DiskINF.asm
Normal 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
|
||||
22
Crazy Estex DSS/DSS/API/DosName.asm
Normal 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
|
||||
;
|
||||
294
Crazy Estex DSS/DSS/API/Environ.asm
Normal 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
|
||||
240
Crazy Estex DSS/DSS/API/Ex_Path.asm
Normal 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
|
||||
|
||||
|
||||
804
Crazy Estex DSS/DSS/API/Execute.ASM
Normal 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 ////////////////////////////
|
||||
;
|
||||
132
Crazy Estex DSS/DSS/API/Find.asm
Normal 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
|
||||
;
|
||||
10
Crazy Estex DSS/DSS/API/FreeMem.asm
Normal file
@ -0,0 +1,10 @@
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #3C. ˆä®à¬ æ¨ï ® ¯ ¬ïâ¨.
|
||||
;
|
||||
; ¢å®¤: ¥â
|
||||
; ¢ë室: HL - ®¡é¥¥ ª®«-¢® áâà ¨æ
|
||||
; BC - ª®«-¢® ᢮¡. áâà ¨æ
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
FREEMEM: LD C,BIOS.GetMemSize
|
||||
JP ToBIOS
|
||||
;
|
||||
31
Crazy Estex DSS/DSS/API/GSwitch.asm
Normal 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
|
||||
;
|
||||
24
Crazy Estex DSS/DSS/API/GetDateTime.asm
Normal 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
|
||||
;
|
||||
21
Crazy Estex DSS/DSS/API/GetMem.asm
Normal 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
|
||||
14
Crazy Estex DSS/DSS/API/Lib_Sub.asm
Normal 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
|
||||
;
|
||||
;
|
||||
216
Crazy Estex DSS/DSS/API/MkDir.asm
Normal 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
|
||||
;
|
||||
97
Crazy Estex DSS/DSS/API/Open.asm
Normal 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
|
||||
;
|
||||
74
Crazy Estex DSS/DSS/API/Print.asm
Normal 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
|
||||
;///////////////////////////////////////////////////////////////////////
|
||||
171
Crazy Estex DSS/DSS/API/Read.asm
Normal 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
|
||||
93
Crazy Estex DSS/DSS/API/Rename.asm
Normal 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
|
||||
; ; ;
|
||||
29
Crazy Estex DSS/DSS/API/RetMem.asm
Normal 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
|
||||
147
Crazy Estex DSS/DSS/API/RmDir.asm
Normal 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
|
||||
;
|
||||