Sources for ROMs. Light PCB and Schematics fixes
@ -1 +0,0 @@
|
||||
Romych,roma,roma-pc,19.08.2025 16:40,file:///home/roma/.config/libreoffice/4;
|
||||
@ -54006,17 +54006,17 @@ f
|
||||
f
|
||||
0.00 g /a0 gs
|
||||
[] 0 d
|
||||
516.46 508.35 m 516.46 508.83 516.06 509.23 515.58 509.23 c
|
||||
515.09 509.23 514.70 508.83 514.70 508.35 c
|
||||
514.70 507.86 515.09 507.47 515.58 507.47 c
|
||||
516.06 507.47 516.46 507.86 516.46 508.35 c
|
||||
517.18 508.35 m 517.18 508.83 516.78 509.23 516.30 509.23 c
|
||||
515.81 509.23 515.42 508.83 515.42 508.35 c
|
||||
515.42 507.86 515.81 507.47 516.30 507.47 c
|
||||
516.78 507.47 517.18 507.86 517.18 508.35 c
|
||||
f
|
||||
1.00 g /a0 gs
|
||||
[] 0 d
|
||||
516.02 508.35 m 516.02 508.59 515.82 508.79 515.58 508.79 c
|
||||
515.33 508.79 515.14 508.59 515.14 508.35 c
|
||||
515.14 508.10 515.33 507.91 515.58 507.91 c
|
||||
515.82 507.91 516.02 508.10 516.02 508.35 c
|
||||
516.74 508.35 m 516.74 508.59 516.54 508.79 516.30 508.79 c
|
||||
516.05 508.79 515.86 508.59 515.86 508.35 c
|
||||
515.86 508.10 516.05 507.91 516.30 507.91 c
|
||||
516.54 507.91 516.74 508.10 516.74 508.35 c
|
||||
f
|
||||
0.00 g /a0 gs
|
||||
[] 0 d
|
||||
@ -56730,8 +56730,8 @@ f
|
||||
1.00 g /a0 gs
|
||||
[] 0 d
|
||||
322.34 239.07 m 322.34 239.31 322.14 239.51 321.90 239.51 c
|
||||
321.66 239.51 321.46 239.31 321.46 239.07 c
|
||||
321.46 238.82 321.66 238.63 321.90 238.63 c
|
||||
321.65 239.51 321.46 239.31 321.46 239.07 c
|
||||
321.46 238.82 321.65 238.63 321.90 238.63 c
|
||||
322.14 238.63 322.34 238.82 322.34 239.07 c
|
||||
f
|
||||
0.00 g /a0 gs
|
||||
@ -60188,8 +60188,8 @@ f
|
||||
1.00 g /a0 gs
|
||||
[] 0 d
|
||||
337.10 266.07 m 337.10 266.31 336.90 266.51 336.66 266.51 c
|
||||
336.42 266.51 336.22 266.31 336.22 266.07 c
|
||||
336.22 265.82 336.42 265.63 336.66 265.63 c
|
||||
336.41 266.51 336.22 266.31 336.22 266.07 c
|
||||
336.22 265.82 336.41 265.63 336.66 265.63 c
|
||||
336.90 265.63 337.10 265.82 337.10 266.07 c
|
||||
f
|
||||
0.00 g /a0 gs
|
||||
@ -60202,8 +60202,8 @@ f
|
||||
1.00 g /a0 gs
|
||||
[] 0 d
|
||||
334.22 235.83 m 334.22 236.07 334.02 236.27 333.78 236.27 c
|
||||
333.54 236.27 333.34 236.07 333.34 235.83 c
|
||||
333.34 235.58 333.54 235.39 333.78 235.39 c
|
||||
333.53 236.27 333.34 236.07 333.34 235.83 c
|
||||
333.34 235.58 333.53 235.39 333.78 235.39 c
|
||||
334.02 235.39 334.22 235.58 334.22 235.83 c
|
||||
f
|
||||
0.00 g /a0 gs
|
||||
@ -60385,7 +60385,7 @@ endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Producer (jsPDF 0.0.0)
|
||||
/CreationDate (D:20250818113732+03'00')
|
||||
/CreationDate (D:20250908162022+03'00')
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
@ -60410,7 +60410,7 @@ trailer
|
||||
/Size 7
|
||||
/Root 6 0 R
|
||||
/Info 5 0 R
|
||||
/ID [ <15DD624F5C56D02C988699D8181084CC> <15DD624F5C56D02C988699D8181084CC> ]
|
||||
/ID [ <200F6D664219776867F1C835ED9666D8> <200F6D664219776867F1C835ED9666D8> ]
|
||||
>>
|
||||
startxref
|
||||
1656600
|
||||
5
Export/SVG/CPU_v1.0.1.svg
Normal file
|
After Width: | Height: | Size: 485 KiB |
|
Before Width: | Height: | Size: 697 KiB After Width: | Height: | Size: 697 KiB |
5
Export/SVG/Interfaces_v1.0.1.svg
Normal file
|
After Width: | Height: | Size: 908 KiB |
|
Before Width: | Height: | Size: 328 KiB After Width: | Height: | Size: 328 KiB |
5
Export/SVG/RAM_CTR_v1.0.1.svg
Normal file
|
After Width: | Height: | Size: 444 KiB |
|
Before Width: | Height: | Size: 486 KiB |
|
Before Width: | Height: | Size: 908 KiB |
|
Before Width: | Height: | Size: 443 KiB |
|
Before Width: | Height: | Size: 205 KiB |
|
Before Width: | Height: | Size: 329 KiB |
5
Export/SVG/Tape_v1.0.1.svg
Normal file
|
After Width: | Height: | Size: 205 KiB |
5
Export/SVG/Video_v1.0.1.svg
Normal file
|
After Width: | Height: | Size: 329 KiB |
BIN
Export/Schematic_Ocean-240.2_v1.0.1.pdf
Normal file
BIN
Gerbers/Gerber_Ocean-240.2_v1.0.1.zip
Normal file
@ -30,8 +30,11 @@ __Программное обеспечение:__ монитор с графи
|
||||
|
||||
[Прошивки для микросхем ПЗУ](ROMs)
|
||||
|
||||
[Файлы для производства печатной платы](Gerbers/Gerber_Ocean-240.2_v1.0.0.zip)
|
||||
[Файлы для производства печатной платы](Gerbers/Gerber_Ocean-240.2_v1.0.1.zip)
|
||||
|
||||
[Темы на форуме zx.pk.ru](https://zx-pk.ru/forums/113-okean-240.html)
|
||||
|
||||

|
||||
|
||||
## Изменения
|
||||
- В версии v1.0.1, Дизассеимблированы обе микросхемы ПЗУ, на основе информации из полученных исходников, немного скорректирована схема и печатная плата.
|
||||
|
||||
11
ROMs/Sources/ROM-FDC/.gitignore
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
*.labels
|
||||
*.obj
|
||||
*.OBJ
|
||||
*.bin
|
||||
*.BIN
|
||||
*.tmp
|
||||
tmp/
|
||||
build/
|
||||
*.lst
|
||||
*.sld
|
||||
|
||||
9
ROMs/Sources/ROM-FDC/.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"maziac.asm-code-lens",
|
||||
"maziac.dezog",
|
||||
"maziac.hex-hover-converter",
|
||||
"maziac.z80-instruction-set",
|
||||
"maziac.sna-fileviewer"
|
||||
]
|
||||
}
|
||||
94
ROMs/Sources/ROM-FDC/.vscode/launch.json
vendored
Normal file
@ -0,0 +1,94 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "dezog",
|
||||
"request": "launch",
|
||||
"name": "Internal Simulator",
|
||||
"remoteType": "zsim",
|
||||
"zsim": {
|
||||
"visualMemory": true,
|
||||
"memoryModel": "CUSTOM",
|
||||
"customMemory": {
|
||||
"slots": [
|
||||
{
|
||||
"name": "PAGE0",
|
||||
"range": ["0x0000","0x3FFF"],
|
||||
"banks": [{"index": [0, 255]}],
|
||||
"initialBank": 0
|
||||
},
|
||||
{
|
||||
"name": "PAGE1",
|
||||
"range": ["0x4000","0x7FFF"],
|
||||
"banks": [{"index": [0, 255]}],
|
||||
"initialBank": 1
|
||||
},
|
||||
{
|
||||
"name": "PAGE2",
|
||||
"range": ["0x8000","0xBFFF"],
|
||||
"banks": [{"index": [0, 255]}],
|
||||
"initialBank": 2
|
||||
},
|
||||
{
|
||||
"name": "PAGE3",
|
||||
"range": ["0xC000","0xFFFF"],
|
||||
"banks": [{"index": [0, 255]}],
|
||||
"initialBank": 3
|
||||
}
|
||||
],
|
||||
"ioMmu": [
|
||||
"if (portAddress == 0x82) {",
|
||||
" bank = portValue;",
|
||||
" PAGE0 = bank;",
|
||||
"}",
|
||||
"if (portAddress == 0xA2) {",
|
||||
" bank = portValue;",
|
||||
" PAGE1 = bank;",
|
||||
"}",
|
||||
"if (portAddress == 0xC2) {",
|
||||
" bank = portValue;",
|
||||
" PAGE2 = bank;",
|
||||
"}",
|
||||
"if (portAddress == 0xE2) {",
|
||||
" bank = portValue;",
|
||||
" PAGE3 = bank;",
|
||||
"}"
|
||||
]
|
||||
},
|
||||
"customCode": {
|
||||
"debug": false,
|
||||
"jsPath": "sim/ports.js"
|
||||
//"uiPath": "simulation/ui.html"
|
||||
},
|
||||
//"ulaScreen": true,
|
||||
//"zxBorderWidth": 20,
|
||||
//"vsyncInterrupt": true,
|
||||
//"zxKeyboard": true,
|
||||
//"zxBeeper": true
|
||||
},
|
||||
"sjasmplus": [
|
||||
{
|
||||
"path": "turbo_mon.sld"
|
||||
}
|
||||
],
|
||||
"history": {
|
||||
"reverseDebugInstructionCount": 1000000,
|
||||
"spotCount": 10,
|
||||
"codeCoverageEnabled": true
|
||||
},
|
||||
"startAutomatically": false,
|
||||
"commandsAfterLaunch": [],
|
||||
"rootFolder": "${workspaceFolder}",
|
||||
"topOfStack": "STACK_TOP",
|
||||
"loadObjs": [
|
||||
{
|
||||
"path": "turbo_mon.obj",
|
||||
"start": "0xe000"
|
||||
}
|
||||
],
|
||||
"execAddress": "0xe000",
|
||||
"smallValuesMaximum": 513,
|
||||
"tmpDir": ".tmp"
|
||||
}
|
||||
]
|
||||
}
|
||||
170
ROMs/Sources/ROM-FDC/.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,170 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "make T-MONITOR (sjasmplus)",
|
||||
"type": "shell",
|
||||
"command": "sjasmplus",
|
||||
"args": [
|
||||
"--sld=turbo_mon.sld",
|
||||
"--sym=turbo_mon.labels",
|
||||
"--raw=turbo_mon.obj",
|
||||
"--fullpath",
|
||||
"turbo_mon.asm"
|
||||
],
|
||||
"problemMatcher": {
|
||||
"owner": "sjasmplus",
|
||||
"fileLocation": "autoDetect",
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "make BDOS (sjasmplus)",
|
||||
"type": "shell",
|
||||
"command": "sjasmplus",
|
||||
"args": [
|
||||
"--sld=bdos.sld",
|
||||
"--sym=bdos.labels",
|
||||
"--raw=bdos.obj",
|
||||
"--fullpath",
|
||||
"bdos.asm"
|
||||
],
|
||||
"problemMatcher": {
|
||||
"owner": "sjasmplus",
|
||||
"fileLocation": "autoDetect",
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "make BIOS (sjasmplus)",
|
||||
"type": "shell",
|
||||
"command": "sjasmplus",
|
||||
"args": [
|
||||
"--sld=bios.sld",
|
||||
"--sym=bios.labels",
|
||||
"--raw=bios.obj",
|
||||
"--fullpath",
|
||||
"bios.asm"
|
||||
],
|
||||
"problemMatcher": {
|
||||
"owner": "sjasmplus",
|
||||
"fileLocation": "autoDetect",
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": false
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"label": "make CCP_RAM (sjasmplus)",
|
||||
"type": "shell",
|
||||
"command": "sjasmplus",
|
||||
"args": [
|
||||
"--sld=ccp_ram.sld",
|
||||
"--sym=ccp_ram.labels",
|
||||
"--raw=ccp_ram.obj",
|
||||
"--fullpath",
|
||||
"ccp_ram.asm"
|
||||
],
|
||||
"problemMatcher": {
|
||||
"owner": "sjasmplus",
|
||||
"fileLocation": "autoDetect",
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "make CCP_ROM (sjasmplus)",
|
||||
"type": "shell",
|
||||
"command": "sjasmplus",
|
||||
"args": [
|
||||
"--sld=ccp_rom.sld",
|
||||
"--sym=ccp_rom.labels",
|
||||
"--raw=ccp_rom.obj",
|
||||
"--fullpath",
|
||||
"ccp_rom.asm"
|
||||
],
|
||||
"problemMatcher": {
|
||||
"owner": "sjasmplus",
|
||||
"fileLocation": "autoDetect",
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": false
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"label": "make CPM (sjasmplus)",
|
||||
"type": "shell",
|
||||
"command": "sjasmplus",
|
||||
"args": [
|
||||
"--sld=cpm.sld",
|
||||
"--sym=cpm.labels",
|
||||
"--raw=cpm.obj",
|
||||
"--fullpath",
|
||||
"cpm.asm"
|
||||
],
|
||||
"problemMatcher": {
|
||||
"owner": "sjasmplus",
|
||||
"fileLocation": "autoDetect",
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
17
ROMs/Sources/ROM-FDC/README.md
Normal file
@ -0,0 +1,17 @@
|
||||
# Ocean-240.2 ROM Sources
|
||||
|
||||
Source codes for personal computer Ocean-240.2 ROM (Z80 mnemonics, but limited for i8080 instruction set).
|
||||
|
||||
This version for Ocean-240.2 with Floppy controller.
|
||||
|
||||
1) 0xC000..0xDFFF - CP/M v2.2
|
||||
Compile:
|
||||
sjasmplus --sld=cpm.sld --sym=cpm.labels --raw=cpm.obj --fullpath cpm.asm
|
||||
|
||||
|
||||
2) 0xE000..0xFFFF - HW Monitor and Turbo Monitor
|
||||
Compile:
|
||||
sjasmplus --sld=turbo_mon.sld --sym=turbo_mon.labels --raw=turbo_mon.obj --fullpath turbo_mon.asm
|
||||
|
||||
|
||||
To compile sources, use [sjasmplus Z80 assembler](https://github.com/z00m128/sjasmplus).
|
||||
2784
ROMs/Sources/ROM-FDC/bdos.asm
Normal file
24
ROMs/Sources/ROM-FDC/bdos_entries.inc
Normal file
@ -0,0 +1,24 @@
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
; CP/M BDOS Entries to build other depended modules
|
||||
;
|
||||
; By Romych 2025-09-09
|
||||
; ======================================================
|
||||
|
||||
IFNDEF _BDOS
|
||||
DEFINE _BDOS
|
||||
|
||||
MODULE BDOS
|
||||
|
||||
bdos_enter EQU 0xba06
|
||||
bdos_compcol EQU 0xba09
|
||||
bdos_strtcol EQU 0xba0a
|
||||
bdos_column EQU 0xba0b
|
||||
bdos_listcp EQU 0xba0c
|
||||
bdos_kbchar EQU 0xba0d
|
||||
|
||||
bdos_entrance EQU 0xc811
|
||||
|
||||
ENDMODULE
|
||||
|
||||
ENDIF
|
||||
601
ROMs/Sources/ROM-FDC/bios.asm
Normal file
@ -0,0 +1,601 @@
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
;
|
||||
; CP/M BIOS
|
||||
;
|
||||
; Disassembled by Romych 2025-09-09
|
||||
; =======================================================
|
||||
|
||||
INCLUDE "equates.inc"
|
||||
INCLUDE "external_ram.inc"
|
||||
INCLUDE "mon_entries.inc"
|
||||
|
||||
IFNDEF BUILD_ROM
|
||||
OUTPUT bios.bin
|
||||
ENDIF
|
||||
|
||||
MODULE BIOS
|
||||
|
||||
ORG 0xD600
|
||||
|
||||
; -------------------------------------------------------
|
||||
; BIOS JUMP TABLE
|
||||
; -------------------------------------------------------
|
||||
boot_f: JP bios_boot
|
||||
wboot_f: JP bios_wboot
|
||||
|
||||
; -------------------------------------------------------
|
||||
; console status to reg-a
|
||||
; -------------------------------------------------------
|
||||
const_f: JP MON_ENTRY.non_con_status
|
||||
|
||||
; -------------------------------------------------------
|
||||
; console character to reg-a
|
||||
; -------------------------------------------------------
|
||||
conin_f: JP MON_ENTRY.mon_con_in
|
||||
|
||||
; -------------------------------------------------------
|
||||
; console character from c to console out
|
||||
; -------------------------------------------------------
|
||||
conout_f: JP MON_ENTRY.mon_con_out
|
||||
|
||||
; -------------------------------------------------------
|
||||
; list device out
|
||||
; -------------------------------------------------------
|
||||
list_f: JP MON_ENTRY.mon_char_print
|
||||
|
||||
; -------------------------------------------------------
|
||||
; punch device out
|
||||
; -------------------------------------------------------
|
||||
punch_f: JP MON_ENTRY.mpn_serial_out
|
||||
|
||||
; -------------------------------------------------------
|
||||
; reader character in to reg-a
|
||||
; -------------------------------------------------------
|
||||
reader_f: JP MON_ENTRY.mon_serial_in
|
||||
|
||||
; -------------------------------------------------------
|
||||
; move to home position, treat as track 00 seek
|
||||
; -------------------------------------------------------
|
||||
home_f: JP home
|
||||
|
||||
; -------------------------------------------------------
|
||||
; select disk given by register c
|
||||
; -------------------------------------------------------
|
||||
seldsk_f: JP seldsk
|
||||
settrk_f: JP settrk
|
||||
setsec_f: JP setsec
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Set DMA address from BC
|
||||
; -------------------------------------------------------
|
||||
setdma_f: JP setdma
|
||||
read_f: JP read
|
||||
write_f: JP write
|
||||
listst_f: JP listst
|
||||
sectran_f: JP sectran
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Reserved
|
||||
; -------------------------------------------------------
|
||||
JP EXT_RAM.JP_WBOOT
|
||||
JP EXT_RAM.JP_WBOOT
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Tape read
|
||||
; -------------------------------------------------------
|
||||
tape_read_f: JP MON_ENTRY.mon_tape_read
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Tape write
|
||||
; -------------------------------------------------------
|
||||
tape_write_f: JP MON_ENTRY.mon_tape_write
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Tape wait block
|
||||
; -------------------------------------------------------
|
||||
tape_wait_f: JP MON_ENTRY.mon_tape_wait
|
||||
|
||||
; -------------------------------------------------------
|
||||
; cold start
|
||||
; -------------------------------------------------------
|
||||
bios_boot:
|
||||
LD HL, (EXT_RAM.BDOS_ENT_ADDR)
|
||||
LD DE, 0x45fa
|
||||
ADD HL, DE
|
||||
LD A, H
|
||||
OR L
|
||||
JP Z, bios_signon
|
||||
LD HL, 0x80
|
||||
LD B, 0x80
|
||||
boot_l1:
|
||||
|
||||
LD (HL), EMPTY
|
||||
INC HL
|
||||
DEC B
|
||||
JP NZ, boot_l1
|
||||
LD HL, 0x80
|
||||
LD DE, 0x0
|
||||
LD B, 0x8
|
||||
|
||||
boot_l2:
|
||||
PUSH BC
|
||||
CALL MON_ENTRY.ram_disk_write
|
||||
POP BC
|
||||
INC DE
|
||||
DEC B
|
||||
JP NZ, boot_l2
|
||||
XOR A
|
||||
LD (EXT_RAM.cur_user_no), A
|
||||
|
||||
bios_signon:
|
||||
LD SP, 0x100
|
||||
LD HL, msg_hello ;= 1Bh
|
||||
CALL print_strz
|
||||
|
||||
; -------------------------------------------------------
|
||||
; warm start
|
||||
; -------------------------------------------------------
|
||||
bios_wboot:
|
||||
LD SP, 0x100
|
||||
LD HL, CCP_DST_ADDR
|
||||
LD DE, CCP_SRC_ADDR
|
||||
LD BC, CCP_SIZE
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Move CPP from 0xC000 to 0xB200
|
||||
; -------------------------------------------------------
|
||||
wb_move_cpp:
|
||||
LD A, (DE)
|
||||
LD (HL), A
|
||||
INC DE
|
||||
INC HL
|
||||
DEC BC
|
||||
LD A, B
|
||||
OR C
|
||||
JP NZ, wb_move_cpp
|
||||
; Clear tail bytes with 00
|
||||
LD HL, TM_VARS.bdos_compcol
|
||||
LD BC, 213
|
||||
|
||||
wb_clr_ba09:
|
||||
LD (HL), 0x0
|
||||
INC HL
|
||||
DEC BC
|
||||
LD A, B
|
||||
OR C
|
||||
JP NZ,wb_clr_ba09
|
||||
LD A, 0xe5
|
||||
LD (TM_VARS.bdos_efcb), A
|
||||
LD A, 0x80
|
||||
LD (TM_VARS.bdos_dmaad), A
|
||||
LD HL, TM_VARS.DPH_base
|
||||
; Move DPH
|
||||
LD DE,dph
|
||||
LD BC, 78
|
||||
wb_mv_dph_next:
|
||||
LD A, (DE)
|
||||
LD (HL), A
|
||||
INC HL
|
||||
INC DE
|
||||
DEC BC
|
||||
LD A, B
|
||||
OR C
|
||||
JP NZ,wb_mv_dph_next
|
||||
|
||||
LD BC, 0x80 ; DMA default buffer addr
|
||||
CALL setdma_f
|
||||
LD A, JP_OPCODE ; JP
|
||||
LD (EXT_RAM.JP_WBOOT), A
|
||||
LD HL,wboot_f
|
||||
LD (EXT_RAM.wboot_addr), HL
|
||||
LD (EXT_RAM.jp_bdos_enter), A
|
||||
LD HL, CCP_RAM.BDOS_ENTER_JUMP
|
||||
LD (EXT_RAM.BDOS_ENT_ADDR), HL
|
||||
XOR A
|
||||
LD (TM_VARS.slicer_has_data), A
|
||||
LD (TM_VARS.slicer_uninited_count), A
|
||||
LD A, (EXT_RAM.cur_user_no)
|
||||
LD C, A
|
||||
JP CCP_DST_ADDR
|
||||
|
||||
|
||||
listst:
|
||||
XOR A
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Select disk given by register c
|
||||
; -------------------------------------------------------
|
||||
seldsk:
|
||||
LD A, C
|
||||
LD (TM_VARS.cur_disk), A
|
||||
OR A
|
||||
JP Z,sd_no_chnged
|
||||
LD A, E ; bit 0 is set if disk already selected
|
||||
AND 0x1
|
||||
JP NZ,sd_no_chnged
|
||||
|
||||
; -------------------------------------------------------
|
||||
; reread disk
|
||||
; -------------------------------------------------------
|
||||
LD (TM_VARS.slicer_has_data), A
|
||||
LD (TM_VARS.slicer_uninited_count), A
|
||||
; calc DPH address
|
||||
sd_no_chnged:
|
||||
LD L, C
|
||||
LD H, 0x0
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
LD DE, TM_VARS.DPH_base
|
||||
ADD HL, DE
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; move to track 00
|
||||
; -------------------------------------------------------
|
||||
home:
|
||||
LD A, (TM_VARS.cur_disk)
|
||||
OR A
|
||||
JP Z,ho_no_chg
|
||||
LD A, (TM_VARS.slicer_need_save)
|
||||
OR A
|
||||
JP NZ,ho_no_chg
|
||||
LD (TM_VARS.slicer_has_data), A
|
||||
ho_no_chg:
|
||||
LD C, 0x0
|
||||
|
||||
; -------------------------------------------------------
|
||||
; set track address (0,...76) for subsequent read/write
|
||||
; -------------------------------------------------------
|
||||
settrk:
|
||||
LD HL, TM_VARS.curr_track
|
||||
LD (HL), C
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; set sector address (1,..., 26) for subsequent read/write
|
||||
; -------------------------------------------------------
|
||||
setsec:
|
||||
LD HL, TM_VARS.curr_sec
|
||||
LD (HL), C
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; set subsequent dma address (initially 80h)
|
||||
; -------------------------------------------------------
|
||||
setdma:
|
||||
LD L, C
|
||||
LD H, B
|
||||
LD (TM_VARS.dma_addr), HL
|
||||
RET
|
||||
sectran:
|
||||
LD L, C
|
||||
LD H, B
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; read track/sector to preset dma address
|
||||
; -------------------------------------------------------
|
||||
read:
|
||||
LD A, (TM_VARS.cur_disk)
|
||||
OR A
|
||||
JP NZ,read_phys ; for physical disk use special routine
|
||||
CALL ram_disk_calc_addr
|
||||
CALL MON_ENTRY.ram_disk_read
|
||||
XOR A
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; write track/sector from preset dma address
|
||||
; -------------------------------------------------------
|
||||
write:
|
||||
LD A, (TM_VARS.cur_disk)
|
||||
OR A
|
||||
JP NZ,write_phys
|
||||
CALL ram_disk_calc_addr
|
||||
CALL MON_ENTRY.ram_disk_write
|
||||
XOR A
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Calculate address for current sector and track
|
||||
; -------------------------------------------------------
|
||||
ram_disk_calc_addr:
|
||||
LD HL, TM_VARS.curr_track
|
||||
; HL = cur_track * 16
|
||||
LD L, (HL)
|
||||
LD H, 0x0
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
; DE = HL + cur_sec
|
||||
EX DE, HL
|
||||
LD HL, TM_VARS.curr_sec
|
||||
LD L, (HL)
|
||||
LD H, 0x0
|
||||
ADD HL, DE
|
||||
EX DE, HL
|
||||
; store address
|
||||
LD HL, (TM_VARS.dma_addr)
|
||||
RET
|
||||
|
||||
read_phys:
|
||||
CALL read_phys_op
|
||||
RET
|
||||
|
||||
write_phys:
|
||||
CALL write_phys_op
|
||||
RET
|
||||
|
||||
read_phys_op:
|
||||
XOR A
|
||||
; reset counter
|
||||
LD (TM_VARS.slicer_uninited_count), A
|
||||
LD A, 0x1
|
||||
LD (TM_VARS.tmp_slicer_operation), A ; 0 - write; 1 - read
|
||||
LD (TM_VARS.tmp_slicer_can_read), A ; enable read fron disk
|
||||
LD A, 0x2
|
||||
LD (TM_VARS.tmp_slicer_flush), A ; disable flush data to disk
|
||||
JP base_read_write
|
||||
|
||||
write_phys_op:
|
||||
XOR A
|
||||
LD (TM_VARS.tmp_slicer_operation), A
|
||||
LD A, C
|
||||
LD (TM_VARS.tmp_slicer_flush), A
|
||||
CP 0x2
|
||||
JP NZ, LAB_ram_d7a0
|
||||
LD A, 0x10 ; 2048/128
|
||||
LD (TM_VARS.slicer_uninited_count), A
|
||||
LD A, (TM_VARS.cur_disk)
|
||||
LD (TM_VARS.slicer_uninited_disk), A
|
||||
LD A, (TM_VARS.curr_track)
|
||||
LD (TM_VARS.slicer_uninited_track), A
|
||||
LD A, (TM_VARS.curr_sec)
|
||||
LD (TM_VARS.slicer_uninited_sector_128), A
|
||||
LAB_ram_d7a0:
|
||||
LD A, (TM_VARS.slicer_uninited_count)
|
||||
OR A
|
||||
JP Z,slicer_read_write
|
||||
DEC A
|
||||
LD (TM_VARS.slicer_uninited_count), A
|
||||
LD A, (TM_VARS.cur_disk)
|
||||
LD HL, TM_VARS.slicer_uninited_disk
|
||||
CP (HL)
|
||||
JP NZ,slicer_read_write
|
||||
LD A, (TM_VARS.curr_track)
|
||||
LD HL, TM_VARS.slicer_uninited_track
|
||||
CP (HL)
|
||||
JP NZ,slicer_read_write
|
||||
LD A, (TM_VARS.curr_sec)
|
||||
LD HL, TM_VARS.slicer_uninited_sector_128
|
||||
CP (HL)
|
||||
JP NZ,slicer_read_write
|
||||
INC (HL)
|
||||
LD A, (HL)
|
||||
CP 36 ; Sectors per track
|
||||
JP C,wpo_no_inc_track
|
||||
LD (HL), 0x0
|
||||
LD A, (TM_VARS.slicer_uninited_track)
|
||||
INC A
|
||||
LD (TM_VARS.slicer_uninited_track), A
|
||||
|
||||
wpo_no_inc_track:
|
||||
XOR A
|
||||
LD (TM_VARS.tmp_slicer_can_read), A
|
||||
JP base_read_write
|
||||
|
||||
slicer_read_write:
|
||||
XOR A
|
||||
LD (TM_VARS.slicer_uninited_count), A
|
||||
INC A
|
||||
LD (TM_VARS.tmp_slicer_can_read), A
|
||||
|
||||
base_read_write:
|
||||
XOR A
|
||||
LD (TM_VARS.tmp_slicer_result), A
|
||||
LD A, (TM_VARS.curr_sec)
|
||||
OR A
|
||||
RRA
|
||||
OR A
|
||||
RRA
|
||||
LD (TM_VARS.tmp_slicer_real_sector), A
|
||||
LD HL, TM_VARS.slicer_has_data
|
||||
LD A, (HL)
|
||||
LD (HL), 0x1
|
||||
OR A
|
||||
JP Z, LAB_ram_d825
|
||||
LD A, (TM_VARS.cur_disk)
|
||||
LD HL, TM_VARS.slicer_disk
|
||||
CP (HL)
|
||||
JP NZ, LAB_ram_d81e
|
||||
LD A, (TM_VARS.curr_track)
|
||||
LD HL, TM_VARS.slicer_track
|
||||
CP (HL)
|
||||
JP NZ, LAB_ram_d81e
|
||||
LD A, (TM_VARS.tmp_slicer_real_sector)
|
||||
LD HL, TM_VARS.slicer_real_sector
|
||||
CP (HL)
|
||||
JP Z,calc_sec_addr_in_bfr
|
||||
LAB_ram_d81e:
|
||||
LD A, (TM_VARS.slicer_need_save)
|
||||
OR A
|
||||
CALL NZ,slicer_save_buffer
|
||||
LAB_ram_d825:
|
||||
LD A, (TM_VARS.cur_disk)
|
||||
LD (TM_VARS.slicer_disk), A
|
||||
LD A, (TM_VARS.curr_track)
|
||||
LD (TM_VARS.slicer_track), A
|
||||
LD A, (TM_VARS.tmp_slicer_real_sector)
|
||||
LD (TM_VARS.slicer_real_sector), A
|
||||
LD A, (TM_VARS.tmp_slicer_can_read)
|
||||
OR A
|
||||
CALL NZ,slicer_read_buffer
|
||||
XOR A
|
||||
LD (TM_VARS.slicer_need_save), A
|
||||
|
||||
calc_sec_addr_in_bfr:
|
||||
LD A, (TM_VARS.curr_sec)
|
||||
AND 0x3
|
||||
LD L, A
|
||||
LD H, 0x0
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
LD DE, TM_VARS.slicer_buffer
|
||||
ADD HL, DE
|
||||
EX DE, HL
|
||||
LD HL, (TM_VARS.dma_addr)
|
||||
LD C, 0x80
|
||||
LD A, (TM_VARS.tmp_slicer_operation)
|
||||
OR A
|
||||
JP NZ,csa_no_save
|
||||
LD A, 0x1
|
||||
LD (TM_VARS.slicer_need_save), A
|
||||
EX DE, HL
|
||||
csa_no_save:
|
||||
LD A, (DE)
|
||||
INC DE
|
||||
LD (HL), A
|
||||
INC HL
|
||||
DEC C
|
||||
JP NZ,csa_no_save
|
||||
LD A, (TM_VARS.tmp_slicer_flush)
|
||||
CP 0x1
|
||||
LD A, (TM_VARS.tmp_slicer_result)
|
||||
RET NZ
|
||||
OR A
|
||||
RET NZ
|
||||
XOR A
|
||||
LD (TM_VARS.slicer_need_save), A
|
||||
CALL slicer_save_buffer
|
||||
LD A, (TM_VARS.tmp_slicer_result)
|
||||
RET
|
||||
|
||||
slicer_save_buffer:
|
||||
CALL slicer_get_floppy_args
|
||||
LD C, 0xA4 ; VG93 CMD
|
||||
CALL MON_ENTRY.write_floppy
|
||||
LD (TM_VARS.tmp_slicer_result), A
|
||||
RET
|
||||
|
||||
slicer_read_buffer:
|
||||
CALL slicer_get_floppy_args
|
||||
LD C, 0x84 ; VG93 CMD
|
||||
CALL MON_ENTRY.read_floppy
|
||||
LD (TM_VARS.tmp_slicer_result), A
|
||||
RET
|
||||
|
||||
slicer_get_floppy_args:
|
||||
LD HL,sector_128_interleave_b ;= 1h
|
||||
LD A, (TM_VARS.slicer_real_sector)
|
||||
ADD A, L
|
||||
LD L, A
|
||||
LD E, (HL)
|
||||
LD A, (TM_VARS.slicer_track)
|
||||
LD D, A
|
||||
LD HL, TM_VARS.slicer_buffer
|
||||
LD A, (TM_VARS.slicer_disk)
|
||||
RET
|
||||
|
||||
sector_128_interleave_b:
|
||||
db 1, 8, 6, 4, 2, 9, 7, 5, 3
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Print zerro ended string; HL -> string
|
||||
; -------------------------------------------------------
|
||||
print_strz:
|
||||
LD A, (HL)
|
||||
OR A
|
||||
RET Z
|
||||
LD C, A
|
||||
PUSH HL
|
||||
CALL conout_f
|
||||
POP HL
|
||||
INC HL
|
||||
JP print_strz
|
||||
|
||||
msg_hello:
|
||||
db ASCII_ESC, "60" ; Режим 32x18 <ESC>60
|
||||
db ASCII_ESC, "8", 2 ; Выбор палтитры <ESC>82
|
||||
db ASCII_ESC, "42" ; Выбор цвета <ESC>42
|
||||
db "48K CP/M (V2.2) REL.7/2D\r\n64K RAM DISK (A:)\r\n180K FD (B:)\r\n", 0
|
||||
|
||||
dph:
|
||||
dw 0h ; Disk A
|
||||
dw 0h
|
||||
dw 0h
|
||||
dw 0h
|
||||
dw 0xBB3F
|
||||
dw 0xBB0E
|
||||
dw 0xBBDE
|
||||
dw 0xBBBF
|
||||
|
||||
dph1:
|
||||
dw 0h ; Disk B
|
||||
dw 0h
|
||||
dw 0h
|
||||
dw 0h
|
||||
dw 0xBB3F
|
||||
dw 0xBB1D
|
||||
dw 0xBC05
|
||||
dw 0xBBEE
|
||||
|
||||
dph2:
|
||||
dw 0h ; Disk C
|
||||
dw 0h
|
||||
dw 0h
|
||||
dw 0h
|
||||
dw 0xBB3F
|
||||
dw 0xBB1D
|
||||
dw 0xBC2C
|
||||
dw 0xBC15
|
||||
|
||||
dpb_192:
|
||||
dw 16 ; Sector per track
|
||||
db 3 ; block shift 3->1k
|
||||
db 7 ; block mask: 7->1k
|
||||
db 0 ; extent mask
|
||||
dw 63 ; block count - 1
|
||||
dw 31 ; Dir size - 1
|
||||
dw 80h ; Dir bitmap
|
||||
dw 8h ; checksum vector size
|
||||
dw 0h ; reserved
|
||||
|
||||
dpb_720:
|
||||
dw 36
|
||||
db 4
|
||||
db 15
|
||||
db 1
|
||||
dw 179
|
||||
dw 63
|
||||
dw 80h
|
||||
dw 10h
|
||||
dw 0h
|
||||
db 4h
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Filler to align blocks in ROM
|
||||
; -------------------------------------------------------
|
||||
LAST EQU $
|
||||
CODE_SIZE EQU LAST-0xD600
|
||||
FILL_SIZE EQU 0x400-CODE_SIZE
|
||||
|
||||
DISPLAY "| BIOS\t| ",/H,boot_f," | ",/H,CODE_SIZE," | ",/H,FILL_SIZE," |"
|
||||
|
||||
FILLER
|
||||
DS FILL_SIZE, 0x00
|
||||
|
||||
ENDMODULE
|
||||
|
||||
IFNDEF BUILD_ROM
|
||||
OUTEND
|
||||
ENDIF
|
||||
39
ROMs/Sources/ROM-FDC/bios_entries.inc
Normal file
@ -0,0 +1,39 @@
|
||||
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
; Definition of CPM BIOS entries to compile depended
|
||||
; modules
|
||||
;
|
||||
; By Romych 2025-09-09
|
||||
; ======================================================
|
||||
IFNDEF _BIOS
|
||||
DEFINE _BIOS
|
||||
|
||||
MODULE BIOS
|
||||
|
||||
boot_f EQU 0xD600
|
||||
wboot_f EQU 0xD603
|
||||
const_f EQU 0xD606
|
||||
conin_f EQU 0xD609
|
||||
conout_f EQU 0xD60C
|
||||
list_f EQU 0xD60F
|
||||
punch_f EQU 0xD612
|
||||
reader_f EQU 0xD615
|
||||
home_f EQU 0xD618
|
||||
seldsk_f EQU 0xD61B
|
||||
settrk_f EQU 0xD61E
|
||||
setsec_f EQU 0xD621
|
||||
setdma_f EQU 0xD624
|
||||
read_f EQU 0xD627
|
||||
write_f EQU 0xD62A
|
||||
sectran_f EQU 0xD630
|
||||
reserved_f1 EQU 0xD633
|
||||
reserved_f2 EQU 0xD636
|
||||
tape_read_f EQU 0xD639
|
||||
tape_write_f EQU 0xD63C
|
||||
tape_wait_f EQU 0xD63F
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
ENDIF
|
||||
1217
ROMs/Sources/ROM-FDC/ccp_ram.asm
Normal file
857
ROMs/Sources/ROM-FDC/ccp_rom.asm
Normal file
@ -0,0 +1,857 @@
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
; CPM CPP, ROM PART
|
||||
; AT 0xDB00
|
||||
;
|
||||
; Disassembled by Romych 2025-09-09
|
||||
; =======================================================
|
||||
|
||||
INCLUDE "io.inc"
|
||||
INCLUDE "equates.inc"
|
||||
INCLUDE "external_ram.inc"
|
||||
INCLUDE "mon_entries.inc"
|
||||
|
||||
IFNDEF BUILD_ROM
|
||||
OUTPUT ccp_rom.bin
|
||||
ENDIF
|
||||
|
||||
MODULE CCP_ROM
|
||||
|
||||
ORG 0xDB00
|
||||
|
||||
ccp_entry:
|
||||
LD HL, 0x0 ; prevent stack overflow
|
||||
ADD HL, SP
|
||||
LD (TM_VARS.saved_stack_ptr), HL
|
||||
LD SP, TM_VARS.safe_stack_ptr
|
||||
|
||||
CALL get_cmd_index
|
||||
LD HL, ccp_commands ;= DB6Ch
|
||||
LD E, A
|
||||
LD D, 0x0
|
||||
ADD HL, DE
|
||||
ADD HL, DE
|
||||
LD A, (HL)
|
||||
INC HL
|
||||
LD H, (HL)
|
||||
LD L, A
|
||||
JP (HL) ; jump to command
|
||||
|
||||
ccp_commands_str:
|
||||
db "DIR READ WRITEEXIT "
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Search user command position in available commands list
|
||||
; -------------------------------------------------------
|
||||
get_cmd_index:
|
||||
LD HL, ccp_commands_str ; -> 'DIR'
|
||||
LD C, 0x0
|
||||
.cmd_next:
|
||||
LD A, C
|
||||
CP CCP_COMMANDS_COUNT
|
||||
RET NC
|
||||
LD DE, CCP_RAM.ccp_cmd_line_buff
|
||||
LD B, CCP_COMMAND_SIZE
|
||||
.cmp_nxt:
|
||||
LD A, (DE)
|
||||
CP (HL) ; -> 'DIR'
|
||||
JP NZ, .no_eq
|
||||
INC DE
|
||||
INC HL
|
||||
DEC B
|
||||
JP NZ, .cmp_nxt
|
||||
LD A, (DE)
|
||||
CP 0x20
|
||||
JP NZ, .inc_next
|
||||
LD A, C
|
||||
RET
|
||||
.no_eq:
|
||||
INC HL
|
||||
DEC B
|
||||
JP NZ, .no_eq
|
||||
.inc_next:
|
||||
INC C
|
||||
JP .cmd_next
|
||||
|
||||
; Command handlers ref table
|
||||
ccp_commands:
|
||||
dw ccp_dir
|
||||
dw ccp_read
|
||||
dw ccp_write
|
||||
dw ccp_exit1
|
||||
dw ccp_ret
|
||||
|
||||
ccp_ret:
|
||||
LD HL, (TM_VARS.saved_stack_ptr)
|
||||
LD SP, HL
|
||||
JP CCP_RAM.ccp_ret_func ; ccp_ram_B200 + 6A5h
|
||||
|
||||
ccp_exit1:
|
||||
JP MON_ENTRY.mon_cold_start
|
||||
|
||||
ccp_dir:
|
||||
CALL CCP_RAM.ccp_get_parameter
|
||||
CALL CCP_RAM.ccp_drive_sel
|
||||
LD HL, CCP_RAM.ccp_cmd_line_buff
|
||||
LD A, (HL)
|
||||
CP ' '
|
||||
JP NZ, .has_par
|
||||
LD B, 11
|
||||
|
||||
.fill_qmark:
|
||||
LD (HL), '?'
|
||||
INC HL
|
||||
DEC B
|
||||
JP NZ, .fill_qmark
|
||||
.has_par:
|
||||
CALL CCP_RAM.ccp_find_first
|
||||
JP NZ, .f_found
|
||||
CALL CCP_RAM.ccp_out_no_file
|
||||
JP CCP_RAM.ccp_proc_interupted
|
||||
.f_found:
|
||||
CALL CCP_RAM.ccp_out_crlf
|
||||
LD HL, 0x0
|
||||
LD (TM_VARS.tmp_dir_total), HL
|
||||
LD E, 0x0
|
||||
.do_next_direntry:
|
||||
PUSH DE
|
||||
CALL CCP_RAM.ccp_find_first
|
||||
POP DE
|
||||
PUSH DE
|
||||
|
||||
; Find file with e number
|
||||
.find_file_e:
|
||||
DEC E
|
||||
JP M, .file_e_not_fnd
|
||||
PUSH DE
|
||||
CALL CCP_RAM.ccp_bdos_find_next
|
||||
POP DE
|
||||
JP Z, .file_e_found
|
||||
JP .find_file_e
|
||||
.file_e_not_fnd:
|
||||
LD A, (CCP_RAM.ccp_bdos_call_result)
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
AND 01100000b
|
||||
LD C, A
|
||||
PUSH BC
|
||||
CALL CCP_RAM.ccp_out_crlf
|
||||
CALL CCP_RAM.ccp_bdos_drv_get
|
||||
INC A
|
||||
LD (EXT_RAM.std_dma_buff), A
|
||||
POP BC
|
||||
LD B, 0x0
|
||||
LD HL, EXT_RAM.std_dma_buff+1 ; std_dma_buff+1
|
||||
LD E, L
|
||||
LD D, H
|
||||
ADD HL, BC
|
||||
|
||||
; copy filename to tmp FCB and out to screen
|
||||
LD B, 0x1
|
||||
.copy_next:
|
||||
LD A, (HL)
|
||||
LD (DE), A
|
||||
LD C, A
|
||||
CALL BIOS.conout_f
|
||||
INC HL
|
||||
INC DE
|
||||
INC B
|
||||
LD A, B
|
||||
CP 12
|
||||
JP C, .copy_next
|
||||
|
||||
.zero_up_36:
|
||||
XOR A
|
||||
LD (DE), A ; zero at end
|
||||
INC B
|
||||
LD A, B
|
||||
CP 36
|
||||
JP C, .zero_up_36
|
||||
|
||||
; calc file size for current entry
|
||||
LD DE, EXT_RAM.std_dma_buff
|
||||
CALL cpp_bdos_f_size
|
||||
LD HL, (EXT_RAM.fcb_ra_record_num) ; file size in blocks
|
||||
|
||||
; get disk blk size
|
||||
LD A, (TM_VARS.bdos_curdsk)
|
||||
OR A
|
||||
JP NZ, .no_dsk_a0
|
||||
LD B, 0x3 ; for A - blk=3
|
||||
JP .LAB_ram_dbfe
|
||||
.no_dsk_a0:
|
||||
LD B, 0x4 ; for other disks - blk=4
|
||||
.LAB_ram_dbfe:
|
||||
LD C, L
|
||||
|
||||
; convert 128b OS block to disk blocks
|
||||
.mul_to_dsk_blk:
|
||||
XOR A
|
||||
LD A, H
|
||||
RRA
|
||||
LD H, A
|
||||
LD A, L
|
||||
RRA
|
||||
LD L, A
|
||||
DEC B
|
||||
JP NZ, .mul_to_dsk_blk
|
||||
; round up
|
||||
LD A, (TM_VARS.bdos_curdsk)
|
||||
OR A
|
||||
JP NZ, .no_dsk_a1
|
||||
LD A, 00000111b ; for A - ~(~0 << 3)
|
||||
JP .ds_skip1
|
||||
.no_dsk_a1:
|
||||
LD A, 00001111b ; for other dsk - ~(~0 << 4)
|
||||
.ds_skip1:
|
||||
AND C
|
||||
JP Z, .cvt_blk_kb
|
||||
INC HL
|
||||
|
||||
; Convert blocks to kilobytes (A-1k B-2k)
|
||||
.cvt_blk_kb:
|
||||
LD A, (TM_VARS.bdos_curdsk)
|
||||
OR A
|
||||
JP Z, .ds_skip2
|
||||
ADD HL, HL ; 2k
|
||||
|
||||
; add file size to total dir size
|
||||
.ds_skip2:
|
||||
EX DE, HL
|
||||
LD HL, (TM_VARS.tmp_dir_total)
|
||||
ADD HL, DE
|
||||
LD (TM_VARS.tmp_dir_total), HL
|
||||
|
||||
; display size in K
|
||||
LD C, ' '
|
||||
CALL BIOS.conout_f
|
||||
CALL BIOS.conout_f
|
||||
CALL ccp_cout_num
|
||||
LD C, 'K'
|
||||
CALL BIOS.conout_f
|
||||
CALL CCP_RAM.ccp_getkey_no_wait
|
||||
JP NZ, CCP_RAM.ccp_proc_interupted
|
||||
POP DE
|
||||
INC E
|
||||
JP .do_next_direntry
|
||||
|
||||
.file_e_found:
|
||||
POP DE
|
||||
LD HL,msg_free_space ;= "\r\nFREE SPACE "
|
||||
|
||||
; Out: FREE SPACE
|
||||
CALL ccp_out_str_z
|
||||
LD A, (TM_VARS.bdos_curdsk)
|
||||
OR A
|
||||
JP NZ, .no_dsk_a3
|
||||
LD DE, DEF_DISK_A_SIZE ; 63 blk
|
||||
JP .calc_remanis_ds
|
||||
.no_dsk_a3:
|
||||
LD DE, DEF_DISK_B_SIZE ; 360 blk * 2k = 720k
|
||||
|
||||
; Disk size - Dir size = Free
|
||||
.calc_remanis_ds:
|
||||
LD HL, (TM_VARS.tmp_dir_total)
|
||||
LD A, E
|
||||
SUB L
|
||||
LD E, A
|
||||
LD A, D
|
||||
SBC A, H
|
||||
LD D, A
|
||||
CALL ccp_cout_num
|
||||
LD C, 'K'
|
||||
CALL BIOS.conout_f
|
||||
CALL CCP_RAM.ccp_out_crlf
|
||||
JP CCP_RAM.ccp_proc_interupted
|
||||
|
||||
msg_free_space:
|
||||
db "\r\nFREE SPACE ",0
|
||||
|
||||
ccp_cout_num:
|
||||
LD A, D
|
||||
AND 11100000b
|
||||
JP Z, .less_224
|
||||
LD C, '*'
|
||||
CALL BIOS.conout_f
|
||||
CALL BIOS.conout_f
|
||||
CALL BIOS.conout_f
|
||||
CALL BIOS.conout_f
|
||||
RET
|
||||
|
||||
.less_224:
|
||||
LD HL, 0x0
|
||||
; copy number to BC
|
||||
LD B, D
|
||||
LD C, E
|
||||
LD DE, 0x1
|
||||
LD A, 13
|
||||
|
||||
.bc_rra:
|
||||
PUSH AF
|
||||
PUSH HL
|
||||
; BC >> 1
|
||||
LD A, B
|
||||
RRA
|
||||
LD B, A
|
||||
LD A, C
|
||||
RRA
|
||||
LD C, A
|
||||
JP NC, .bc_rra_ex
|
||||
POP HL
|
||||
CALL cpp_daa16
|
||||
PUSH HL
|
||||
|
||||
.bc_rra_ex:
|
||||
LD L, E
|
||||
LD H, D
|
||||
CALL cpp_daa16
|
||||
EX DE, HL
|
||||
POP HL
|
||||
POP AF
|
||||
DEC A
|
||||
JP NZ, .bc_rra
|
||||
LD D, 0x4
|
||||
LD B, 0x0
|
||||
|
||||
LAB_ram_dcc5:
|
||||
LD E, 0x4
|
||||
|
||||
LAB_ram_dcc7:
|
||||
LD A, L
|
||||
RLA
|
||||
LD L, A
|
||||
LD A, H
|
||||
RLA
|
||||
LD H, A
|
||||
LD A, C
|
||||
RLA
|
||||
LD C, A
|
||||
DEC E
|
||||
JP NZ, LAB_ram_dcc7
|
||||
LD A, C
|
||||
AND 0xf
|
||||
ADD A, '0'
|
||||
CP '0'
|
||||
JP NZ, .no_zero
|
||||
DEC B
|
||||
INC B
|
||||
JP NZ, .b_no_one
|
||||
LD A, D
|
||||
DEC A
|
||||
JP Z, .d_one
|
||||
LD A, ' '
|
||||
JP .b_no_one
|
||||
|
||||
.d_one:
|
||||
LD A, '0'
|
||||
.no_zero:
|
||||
LD B, 0x1
|
||||
.b_no_one:
|
||||
LD C, A
|
||||
CALL BIOS.conout_f
|
||||
DEC D
|
||||
JP NZ, LAB_ram_dcc5
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; ADD with correction HL=HL+DE
|
||||
; -------------------------------------------------------
|
||||
cpp_daa16:
|
||||
LD A, L
|
||||
ADD A, E
|
||||
DAA
|
||||
LD L, A
|
||||
LD A, H
|
||||
ADC A, D
|
||||
DAA
|
||||
LD H, A
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Call BDOS function 35 (F_SIZE) - Compute file size
|
||||
; -------------------------------------------------------
|
||||
cpp_bdos_f_size:
|
||||
LD C, 35
|
||||
JP EXT_RAM.jp_bdos_enter
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Read data from Tape
|
||||
; -------------------------------------------------------
|
||||
ccp_read:
|
||||
CALL BIOS.const_f
|
||||
OR A
|
||||
JP Z, .no_key ; chk key pressed
|
||||
CALL BIOS.conin_f
|
||||
JP ccp_read
|
||||
.no_key:
|
||||
CALL CCP_RAM.ccp_bdos_drv_allreset
|
||||
CALL CCP_RAM.ccp_out_crlf
|
||||
|
||||
; wait tape block header
|
||||
LD A, 100
|
||||
CALL BIOS.tape_wait_f
|
||||
OR A
|
||||
JP NZ, key_pressed1
|
||||
|
||||
; try to load header 8 times
|
||||
LD E, 8
|
||||
.load8_cont:
|
||||
LD HL, EXT_RAM.std_dma_buff
|
||||
CALL BIOS.tape_read_f
|
||||
CP 0x4
|
||||
JP Z, key_pressed1
|
||||
OR A
|
||||
JP Z, .hdr_id_chk
|
||||
DEC E
|
||||
JP NZ, .load8_cont
|
||||
JP cp_load_err_what
|
||||
|
||||
; Check blk ID, will be 0x8000
|
||||
.hdr_id_chk:
|
||||
LD A, B
|
||||
CP 0x80
|
||||
JP NZ, .load8_cont
|
||||
LD A, C
|
||||
OR A
|
||||
JP NZ, .load8_cont
|
||||
; set end of file name strZ
|
||||
XOR A
|
||||
LD (EXT_RAM.std_dma_buff+12), A
|
||||
LD DE, EXT_RAM.std_dma_buff
|
||||
LD HL, CCP_RAM.ccp_fname_addr ;= 2020h
|
||||
LD (CCP_RAM.ccp_name_addr), HL ;= B208h
|
||||
|
||||
.cp_name_char:
|
||||
LD A, (DE)
|
||||
OR A
|
||||
JP Z, .name_copied
|
||||
LD (HL), A ;= 2020h
|
||||
INC HL
|
||||
INC DE
|
||||
JP .cp_name_char
|
||||
.name_copied:
|
||||
LD (HL), 0x0 ; mark end of strZ
|
||||
CALL CCP_RAM.ccp_get_parameter
|
||||
JP NZ, CCP_RAM.SUB_ram_b409
|
||||
|
||||
; Output file name to screen
|
||||
LD HL, CCP_RAM.ccp_cmd_line_buff
|
||||
LD B, 11
|
||||
|
||||
.name_output:
|
||||
LD A, (HL)
|
||||
AND 01111111b ; 7bit ASCII
|
||||
LD C, A
|
||||
CALL BIOS.conout_f
|
||||
INC HL
|
||||
DEC B
|
||||
JP NZ, .name_output
|
||||
; Out ' '
|
||||
LD C, ' '
|
||||
CALL BIOS.conout_f
|
||||
CALL BIOS.conout_f
|
||||
CALL BIOS.conout_f
|
||||
CALL CCP_RAM.ccp_open_f
|
||||
JP Z, .recreate_f
|
||||
LD HL,MSG_EX ;= "*EX* "
|
||||
CALL ccp_out_str_z
|
||||
LD HL, CCP_RAM.ccp_cmd_line_buff+8
|
||||
; '$$$' at the end of buffer
|
||||
LD A, '$'
|
||||
LD (HL), A
|
||||
INC HL
|
||||
LD (HL), A
|
||||
INC HL
|
||||
LD (HL), A
|
||||
|
||||
; delete file if exists and create new
|
||||
.recreate_f:
|
||||
LD DE, CCP_RAM.ccp_current_fcb
|
||||
PUSH DE
|
||||
CALL CCP_RAM.ccp_bdos_delete
|
||||
POP DE
|
||||
CALL CCP_RAM.ccp_bdos_create_f
|
||||
JP Z, CCP_RAM.ccp_no_space_l1 ; out NO SPACE if err
|
||||
XOR A
|
||||
LD (CCP_RAM.ccp_cmd_line_buff+31), A
|
||||
|
||||
; Load block with ID=1
|
||||
LD DE, 1
|
||||
.fin_load:
|
||||
LD HL, EXT_RAM.std_dma_buff
|
||||
PUSH DE
|
||||
|
||||
.blk_ld_rep:
|
||||
CALL BIOS.tape_read_f
|
||||
CP 4
|
||||
JP Z, key_pressed2
|
||||
OR A
|
||||
JP Z, .blk_id_chk
|
||||
LD A, (CCP_RAM.ccp_cmd_line_buff+31)
|
||||
AND 0x7f
|
||||
JP NZ, cp_read_cs
|
||||
|
||||
.blk_id_chk:
|
||||
LD A, C
|
||||
OR B
|
||||
JP Z, .blk_ld_rep
|
||||
|
||||
; Check id for 0xFFFF - last blk
|
||||
LD A, C
|
||||
AND B
|
||||
CP 0xff
|
||||
JP Z, blk_id_last
|
||||
; Check ID for DE
|
||||
LD A, C
|
||||
CP E
|
||||
JP NZ, blk_ne_id
|
||||
LD A, B
|
||||
CP D
|
||||
JP NZ, blk_ne_id
|
||||
; Ok, write blk to disk
|
||||
LD DE, EXT_RAM.std_dma_buff
|
||||
CALL CCP_RAM.ccp_bdos_dma_set
|
||||
LD DE, CCP_RAM.ccp_current_fcb
|
||||
CALL CCP_RAM.ccp_bdos_f_write
|
||||
POP DE
|
||||
JP NZ,ccp_del_f_no_space
|
||||
INC DE
|
||||
JP .fin_load
|
||||
|
||||
cp_load_err_what:
|
||||
LD HL,msg_what ;= "WHAT?\a"
|
||||
CALL ccp_out_str_z
|
||||
JP load_restart
|
||||
|
||||
cp_read_cs:
|
||||
POP BC
|
||||
LD HL, msg_cs ;= "<CS "
|
||||
CALL ccp_out_str_z
|
||||
CALL ccp_cout_num
|
||||
JP out_clos
|
||||
|
||||
blk_ne_id:
|
||||
POP BC
|
||||
LD HL, msg_sq ;= "<SQ "
|
||||
CALL ccp_out_str_z
|
||||
CALL ccp_cout_num
|
||||
|
||||
out_clos:
|
||||
LD HL, msg_clos ;= ">\a"
|
||||
CALL ccp_out_str_z
|
||||
|
||||
; cleanup partial file and load again
|
||||
load_restart:
|
||||
LD DE, CCP_RAM.ccp_current_fcb
|
||||
CALL CCP_RAM.ccp_bdos_delete
|
||||
CALL CCP_RAM.ccp_set_dma_std_addr
|
||||
JP ccp_read
|
||||
|
||||
blk_id_last:
|
||||
LD DE, CCP_RAM.ccp_current_fcb
|
||||
CALL CCP_RAM.ccp_bdos_close_f
|
||||
INC A
|
||||
JP Z,ccp_del_f_no_space ; If no success, may be no disk space
|
||||
CALL CCP_RAM.ccp_set_dma_std_addr ; reset DMA buff
|
||||
JP ccp_read ; and read next file
|
||||
|
||||
key_pressed2:
|
||||
POP DE
|
||||
PUSH BC
|
||||
LD DE, CCP_RAM.ccp_current_fcb
|
||||
CALL CCP_RAM.ccp_bdos_delete
|
||||
POP BC
|
||||
LD A, C
|
||||
AND 0x7f
|
||||
CP CTRL_C
|
||||
JP Z, ctrl_c_or_esc
|
||||
CP ASCII_ESC
|
||||
JP Z, ctrl_c_or_esc
|
||||
LD HL, msg_break ;= "*BREAK*"
|
||||
CALL ccp_out_str_z
|
||||
JP ccp_read
|
||||
key_pressed1:
|
||||
LD A, C
|
||||
AND 0x7f
|
||||
CP CTRL_C
|
||||
JP Z, ctrl_c
|
||||
CP ASCII_ESC
|
||||
JP NZ, ccp_read
|
||||
ctrl_c:
|
||||
CALL CCP_RAM.ccp_set_dma_std_addr
|
||||
JP CCP_RAM.ccp_proc_interupted
|
||||
ctrl_c_or_esc:
|
||||
CALL CCP_RAM.ccp_out_crlf
|
||||
JP ctrl_c
|
||||
|
||||
msg_what:
|
||||
db "WHAT?\a",0
|
||||
|
||||
msg_cs:
|
||||
db "<CS ", 0
|
||||
|
||||
msg_sq:
|
||||
db "<SQ ", 0
|
||||
|
||||
msg_break:
|
||||
db "*BREAK*", 0
|
||||
|
||||
MSG_EX:
|
||||
db "*EX* ", 0
|
||||
|
||||
msg_clos:
|
||||
db ">\a", 0
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Out zerro ended string
|
||||
; In: HL -> strZ
|
||||
; -------------------------------------------------------
|
||||
ccp_out_str_z:
|
||||
LD A, (HL)
|
||||
OR A
|
||||
RET Z
|
||||
LD C, A
|
||||
CALL BIOS.conout_f
|
||||
INC HL
|
||||
JP ccp_out_str_z
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Delete file and out No Space message
|
||||
; -------------------------------------------------------
|
||||
ccp_del_f_no_space:
|
||||
LD DE, CCP_RAM.ccp_current_fcb
|
||||
CALL CCP_RAM.ccp_bdos_delete
|
||||
JP CCP_RAM.ccp_no_space_l1
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Read current file next block
|
||||
; Out: A=0 - Ok, 0xFF - HW Error;
|
||||
; -------------------------------------------------------
|
||||
cpp_read_f_blk:
|
||||
LD DE, TM_VARS.ccp_FCB ; FCB here
|
||||
JP CCP_RAM.ccp_bdos_read_f
|
||||
|
||||
ccp_write:
|
||||
CALL CCP_RAM.ccp_get_parameter
|
||||
CALL CCP_RAM.ccp_drive_sel
|
||||
LD HL, CCP_RAM.ccp_cmd_line_buff
|
||||
LD A, (HL)
|
||||
CP ' '
|
||||
JP NZ, .find_f
|
||||
LD B, 11
|
||||
|
||||
.fill_with_qm:
|
||||
LD (HL), '?'
|
||||
INC HL
|
||||
DEC B
|
||||
JP NZ, .fill_with_qm
|
||||
|
||||
.find_f:
|
||||
CALL CCP_RAM.ccp_find_first
|
||||
JP NZ, .found_f
|
||||
CALL CCP_RAM.ccp_out_no_file
|
||||
JP CCP_RAM.ccp_proc_interupted
|
||||
|
||||
.found_f:
|
||||
LD E, 0 ; file counter
|
||||
|
||||
.do_next_f1:
|
||||
PUSH DE
|
||||
CALL CCP_RAM.ccp_find_first
|
||||
POP DE
|
||||
PUSH DE
|
||||
|
||||
.do_next_f2:
|
||||
DEC E
|
||||
JP M, .do_file
|
||||
PUSH DE
|
||||
CALL CCP_RAM.ccp_bdos_find_next
|
||||
POP DE
|
||||
JP Z, .no_more_f
|
||||
JP .do_next_f2
|
||||
|
||||
.do_file:
|
||||
POP BC
|
||||
PUSH BC
|
||||
LD A, C
|
||||
OR A
|
||||
JP Z, .calc_addr
|
||||
LD DE, 1200
|
||||
|
||||
; Delay with key interrupt check
|
||||
.delay_1:
|
||||
XOR A
|
||||
.delay_2:
|
||||
DEC A
|
||||
JP NZ, .delay_2
|
||||
PUSH DE
|
||||
CALL CCP_RAM.ccp_getkey_no_wait
|
||||
POP DE
|
||||
JP NZ, CCP_RAM.ccp_proc_interupted
|
||||
DEC DE
|
||||
LD A, D
|
||||
OR E
|
||||
JP NZ, .delay_1
|
||||
|
||||
.calc_addr:
|
||||
LD A, (CCP_RAM.ccp_bdos_call_result)
|
||||
; A=0-3 - for Ok, calc address od DIR entry in DMA buffer
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
AND 01100000b
|
||||
LD C, A
|
||||
PUSH BC
|
||||
CALL CCP_RAM.ccp_out_crlf
|
||||
CALL CCP_RAM.ccp_bdos_drv_get
|
||||
INC A
|
||||
LD (TM_VARS.ccp_FCB), A
|
||||
POP BC
|
||||
LD B, 0x0
|
||||
LD HL, EXT_RAM.std_dma_buff+1
|
||||
ADD HL, BC
|
||||
LD DE, TM_VARS.ccp_FCB_fn
|
||||
LD B, 0x1
|
||||
|
||||
.copy_fn:
|
||||
LD A, (HL)
|
||||
LD (DE), A
|
||||
INC HL
|
||||
INC DE
|
||||
INC B
|
||||
LD A, B
|
||||
CP 12
|
||||
JP C, .copy_fn
|
||||
|
||||
.fillz_fn:
|
||||
XOR A
|
||||
LD (DE), A
|
||||
INC DE
|
||||
INC B
|
||||
LD A, B
|
||||
CP 36
|
||||
JP C, .fillz_fn
|
||||
LD HL, TM_VARS.ccp_FCB_fn
|
||||
CALL ccp_out_str_z
|
||||
LD HL, EXT_RAM.std_dma_buff
|
||||
|
||||
; Empty first 128 bytes of DMA buffer
|
||||
LD B, 128
|
||||
.clear_buf:
|
||||
LD (HL), 0x0
|
||||
INC HL
|
||||
DEC B
|
||||
JP NZ, .clear_buf
|
||||
; Copy file name at buffer start
|
||||
LD HL, EXT_RAM.std_dma_buff
|
||||
LD DE, TM_VARS.ccp_FCB_fn
|
||||
LD B, 8
|
||||
|
||||
.find_sp:
|
||||
LD A, (DE)
|
||||
CP ' '
|
||||
JP Z, .sp_rep_dot ; ' ' -> '.'
|
||||
LD (HL), A
|
||||
INC HL
|
||||
INC DE
|
||||
JP .find_sp
|
||||
.sp_rep_dot:
|
||||
LD (HL), '.'
|
||||
INC HL
|
||||
CALL CCP_RAM.ccp_find_nxt_par
|
||||
|
||||
.cont_copy_fn:
|
||||
LD A, (DE)
|
||||
LD (HL), A
|
||||
OR A
|
||||
JP Z, .end_copy
|
||||
INC HL
|
||||
INC DE
|
||||
JP .cont_copy_fn
|
||||
|
||||
.end_copy:
|
||||
LD DE, TM_VARS.ccp_FCB
|
||||
CALL CCP_RAM.ccp_bdos_call_open
|
||||
LD DE, 0x8000 ; Block ID
|
||||
LD HL, EXT_RAM.std_dma_buff
|
||||
CALL cpp_pause_tape_wr_blk
|
||||
CALL cpp_pause_tape_wr_blk
|
||||
LD DE, 0x1
|
||||
|
||||
; Read file block and write to Tape
|
||||
.read_f_write_t:
|
||||
PUSH DE
|
||||
CALL cpp_read_f_blk
|
||||
; a=0xff if error; a=1 - EOF
|
||||
DEC A
|
||||
JP Z, .eof
|
||||
LD A, (TM_VARS.ccp_FCB_CR)
|
||||
AND 0x7f
|
||||
CP 0x1
|
||||
JP NZ, .write_once
|
||||
; Write block to Tape with ID=0 twice
|
||||
LD DE, 0x0 ; Block ID=0
|
||||
LD HL, EXT_RAM.std_dma_buff
|
||||
CALL cpp_pause_tape_wr_blk
|
||||
|
||||
.write_once:
|
||||
CALL CCP_RAM.ccp_getkey_no_wait
|
||||
LD HL, EXT_RAM.std_dma_buff
|
||||
POP DE
|
||||
JP NZ, CCP_RAM.ccp_proc_interupted
|
||||
CALL cpp_pause_tape_wr_blk
|
||||
; Inc Block ID and continue
|
||||
INC DE
|
||||
JP .read_f_write_t
|
||||
|
||||
.eof:
|
||||
POP DE
|
||||
EX DE, HL
|
||||
LD (EXT_RAM.std_dma_buff), HL
|
||||
EX DE, HL
|
||||
|
||||
; Final block ID=0xFFFF
|
||||
LD DE, 0xffff
|
||||
; Write twice
|
||||
CALL cpp_pause_tape_wr_blk
|
||||
CALL cpp_pause_tape_wr_blk
|
||||
POP DE
|
||||
INC E
|
||||
JP .do_next_f1
|
||||
|
||||
.no_more_f:
|
||||
POP DE
|
||||
CALL CCP_RAM.ccp_out_crlf
|
||||
JP CCP_RAM.ccp_proc_interupted
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Write block to tape after pause
|
||||
; -------------------------------------------------------
|
||||
cpp_pause_tape_wr_blk:
|
||||
LD BC, 1500
|
||||
.delay:
|
||||
DEC BC
|
||||
LD A, B
|
||||
OR C
|
||||
JP NZ, .delay
|
||||
JP BIOS.tape_write_f
|
||||
RET NC
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Filler to align blocks in ROM
|
||||
; -------------------------------------------------------
|
||||
LAST EQU $
|
||||
CODE_SIZE EQU LAST-0xDB00
|
||||
FILL_SIZE EQU 0x500-CODE_SIZE
|
||||
|
||||
DISPLAY "| CCP_ROM\t| ",/H,ccp_entry," | ",/H,CODE_SIZE," | ",/H,FILL_SIZE," |"
|
||||
|
||||
FILLER
|
||||
DS FILL_SIZE, 0xFF
|
||||
|
||||
ENDMODULE
|
||||
|
||||
IFNDEF BUILD_ROM
|
||||
OUTEND
|
||||
ENDIF
|
||||
43
ROMs/Sources/ROM-FDC/cpm.asm
Normal file
@ -0,0 +1,43 @@
|
||||
; ======================================================
|
||||
; Ocean-240.2
|
||||
; CP/M Combine file. Includes all sources to build
|
||||
; ROM 0xE000
|
||||
;
|
||||
; Disassembled by Romych 2025-09-09
|
||||
; ======================================================
|
||||
|
||||
DEFINE BUILD_ROM
|
||||
|
||||
DEVICE NOSLOT64K
|
||||
|
||||
;
|
||||
; |-----------|---------------|-----------|---------------------------------------|
|
||||
; | OFFSET | SIZE | Module | Memory Address |
|
||||
; |-----------|---------------|-----------|---------------------------------------|
|
||||
; | 0x0000 | 2048 (0x800) | CCP_RAM | 0xC000..0xC7FF -> RAM 0xB200..0xB5FF |
|
||||
; | 0x0800 | 3584 (0xE00) | BDOS | 0xC800.. |
|
||||
; | 0x1600 | 1024 (0x400) | BIOS | 0xD600..D9FF |
|
||||
; | 0x1B00 | 1280 (0x500) | CCP_ROM | 0xDB00..DFFF |
|
||||
; |-----------|---------------|-----------|---------------------------------------|
|
||||
;
|
||||
|
||||
DISPLAY "| Module\t| Offset | Code | Free |"
|
||||
DISPLAY "|-------------|---------|--------|--------|"
|
||||
|
||||
|
||||
OUTPUT cpm-C000.bin
|
||||
|
||||
INCLUDE "ccp_ram.asm"
|
||||
INCLUDE "bdos.asm"
|
||||
INCLUDE "bios.asm"
|
||||
INCLUDE "cpm_fill_1.asm"
|
||||
INCLUDE "ccp_rom.asm"
|
||||
|
||||
OUTEND
|
||||
|
||||
OUTPUT tm_vars.bin
|
||||
INCLUDE "tm_vars.inc"
|
||||
OUTEND
|
||||
|
||||
|
||||
END
|
||||
24
ROMs/Sources/ROM-FDC/cpm_fill_1.asm
Normal file
@ -0,0 +1,24 @@
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
;
|
||||
; CPM filler, between BIOS and CCP_ROM
|
||||
;
|
||||
; By Romych 2025-09-09
|
||||
; =======================================================
|
||||
|
||||
IFNDEF BUILD_ROM
|
||||
OUTPUT ccp_fill_1.bin
|
||||
ENDIF
|
||||
|
||||
MODULE CPM_FILL_1
|
||||
ORG 0xDA00
|
||||
|
||||
FILL1 DS 107,0
|
||||
FILL2 DB 0x7B
|
||||
FILL3 DS 148, 0xFF
|
||||
|
||||
ENDMODULE
|
||||
|
||||
IFNDEF BUILD_ROM
|
||||
OUTEND
|
||||
ENDIF
|
||||
104
ROMs/Sources/ROM-FDC/equates.inc
Normal file
@ -0,0 +1,104 @@
|
||||
; ======================================================
|
||||
; Ocean-240.2
|
||||
; Equates for all assembly sources
|
||||
;
|
||||
; By Romych 2025-09-09
|
||||
; ======================================================
|
||||
|
||||
IFNDEF _EQUATES
|
||||
DEFINE _EQUATES
|
||||
|
||||
|
||||
ADDLIST EQU 0x08
|
||||
ASCII_BS EQU 0x08
|
||||
ASCII_CAN EQU 0x18
|
||||
ASCII_CR EQU 0x0D
|
||||
ASCII_EM EQU 0x19
|
||||
ASCII_ESC EQU 0x1B
|
||||
ASCII_FF EQU 0x0C
|
||||
ASCII_LF EQU 0x0A
|
||||
ASCII_SUB EQU 0x1A
|
||||
ASCII_TAB EQU 0x09
|
||||
ASCII_US EQU 0x1F
|
||||
; ------------------------------------------------------
|
||||
BDOS_CTLC EQU 0x03
|
||||
BDOS_NFUNCS EQU 0x29
|
||||
BELL_CHAR EQU 0x07
|
||||
BELL_PIN EQU 0x08
|
||||
; ------------------------------------------------------
|
||||
CCP_COMMAND_SIZE EQU 0x05
|
||||
CCP_COMMANDS_COUNT EQU 0x04
|
||||
|
||||
CCP_SRC_ADDR EQU 0xc000
|
||||
CCP_DST_ADDR EQU 0xb200
|
||||
CCP_SIZE EQU 0x809
|
||||
|
||||
|
||||
CTL EQU 0x5E
|
||||
CTLC EQU 0x03
|
||||
CTLS EQU 0x13
|
||||
CTRL_C EQU 0x03
|
||||
; ------------------------------------------------------
|
||||
DBPLIST EQU 0x0F
|
||||
DEF_DISK_A_SIZE EQU 0x3F
|
||||
DEF_DISK_B_SIZE EQU 0x0168
|
||||
DSK_MAP EQU 0x10
|
||||
DSK_MSK EQU 0x03
|
||||
DSK_SHF EQU 0x02
|
||||
DVERS EQU 0x22
|
||||
; ------------------------------------------------------
|
||||
EMPTY EQU 0xE5
|
||||
ENDDIR EQU 0xFFFF
|
||||
ESC_CMD_END EQU 0x1A
|
||||
EXT_NUM EQU 0x0C
|
||||
; ------------------------------------------------------
|
||||
FALSE EQU 0x00
|
||||
FCB_LEN EQU 0x20
|
||||
FCB_SHF EQU 0x05
|
||||
FDC_DD80RB EQU 0x21
|
||||
FDC_NOT_READY EQU 0x80
|
||||
FDC_RESTORE_L EQU 0x08
|
||||
FDC_SEEK_LV EQU 0x1C
|
||||
FWF_MASK EQU 0x80
|
||||
; ------------------------------------------------------
|
||||
JP_OPCODE EQU 0xC3
|
||||
; ------------------------------------------------------
|
||||
KBD_ACK EQU 0x10
|
||||
KBD_IRQ EQU 0x02
|
||||
KEY_ALF EQU 0x0D
|
||||
KEY_FIX EQU 0x15
|
||||
; ------------------------------------------------------
|
||||
LST_REC EQU 0x7F
|
||||
; ------------------------------------------------------
|
||||
MAX_EXT EQU 0x1F
|
||||
MAX_MOD EQU 0x0F
|
||||
MOD_NUM EQU 0x0E
|
||||
; ------------------------------------------------------
|
||||
NAM_LEN EQU 0x0F
|
||||
NXT_REC EQU 0x20
|
||||
; ------------------------------------------------------
|
||||
PIC_POLL_MODE EQU 0x0A
|
||||
PORT_C4 EQU 0x10
|
||||
PRINTER_ACK EQU 0x10
|
||||
PRINTER_IRQ EQU 0x08
|
||||
; ------------------------------------------------------
|
||||
RAN_REC EQU 0x21
|
||||
REC_CNT EQU 0x0F
|
||||
REC_SIZ EQU 0x80
|
||||
RO_FILE EQU 0x09
|
||||
RUB_OUT EQU 0x7F
|
||||
RX_READY EQU 0x02
|
||||
; ------------------------------------------------------
|
||||
TAPE_D EQU 0x08
|
||||
TAPE_P EQU 0x04
|
||||
TIMER_IRQ EQU 0x10
|
||||
TL_HIGH EQU 0x05
|
||||
TL_LOW EQU 0x03
|
||||
TL_MID EQU 0x04
|
||||
TMR0_SQWAVE EQU 0x36
|
||||
TRUE EQU 0xFF
|
||||
TX_READY EQU 0x01
|
||||
; ------------------------------------------------------
|
||||
U_BYTES EQU 0x0D
|
||||
|
||||
ENDIF
|
||||
49
ROMs/Sources/ROM-FDC/external_ram.inc
Normal file
@ -0,0 +1,49 @@
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
;
|
||||
; External addresses references to build
|
||||
; CP/M and HW-Monitor
|
||||
; By Romych 2025-09-09
|
||||
; =======================================================
|
||||
|
||||
IFNDEF _EXT_RAM
|
||||
DEFINE _EXT_RAM
|
||||
|
||||
MODULE EXT_RAM
|
||||
|
||||
JP_WBOOT EQU 0x0000
|
||||
wboot_addr EQU 0x0001
|
||||
bdos_ioloc EQU 0x0003
|
||||
cur_user_no EQU 0x0004
|
||||
jp_bdos_enter EQU 0x0005
|
||||
BDOS_ENT_ADDR EQU 0x0006
|
||||
RST1 EQU 0x0008
|
||||
RST1_handler_addr EQU 0x0009
|
||||
RST2 EQU 0x0010
|
||||
RST3 EQU 0x0018
|
||||
RST4 EQU 0x0020
|
||||
RST5 EQU 0x0028
|
||||
RST6 EQU 0x0030
|
||||
RST7 EQU 0x0038
|
||||
reserve1 EQU 0x003b
|
||||
bios_var1 EQU 0x0041
|
||||
bios_var2 EQU 0x0042
|
||||
bios_var3 EQU 0x0043
|
||||
reserve2 EQU 0x0050
|
||||
FSR_STD EQU 0x005c
|
||||
NMI_ISR EQU 0x0066
|
||||
FSB_R0 EQU 0x007d
|
||||
FSB_R1 EQU 0x007e
|
||||
FSB_R2 EQU 0x007f
|
||||
std_dma_buff EQU 0x0080
|
||||
;std_dma_buff+1 EQU 0x0081
|
||||
;std_dma_buff_82 EQU 0x0082
|
||||
;std_dma_buff_83 EQU 0x0083
|
||||
;std_dma_buff+12 EQU 0x008c
|
||||
fcb_ra_record_num EQU 0x00a1
|
||||
loaded_program EQU 0x0100
|
||||
video_ram EQU 0x4000
|
||||
|
||||
ENDMODULE
|
||||
|
||||
ENDIF
|
||||
132
ROMs/Sources/ROM-FDC/io.inc
Normal file
@ -0,0 +1,132 @@
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
; Computer with FDC variant.
|
||||
; IO Ports definitions
|
||||
;
|
||||
; By Romych 2025-09-09
|
||||
; =======================================================
|
||||
|
||||
IFNDEF _IO_PORTS
|
||||
DEFINE _IO_PORTS
|
||||
|
||||
; -------------------------------------------------------
|
||||
; КР580ВВ55 DD79
|
||||
; -------------------------------------------------------
|
||||
; Port A - User port A
|
||||
USR_DD79PA EQU 0x00
|
||||
|
||||
; Port B - User port B
|
||||
USR_DD79PB EQU 0x01
|
||||
|
||||
; Port C - User port C
|
||||
USR_DD79PC EQU 0x02
|
||||
|
||||
; Config: [1][ma1,ma0][0-aO|1-aI],[0-chO,1-chI],[mb],[0-bO|1-bI],[0-clO,1-clI]
|
||||
; Set bit: [0][xxx][bbb][0|1]
|
||||
USR_DD79CTR EQU 0x03
|
||||
|
||||
; -------------------------------------------------------
|
||||
; КР1818ВГ93
|
||||
; -------------------------------------------------------
|
||||
; CMD
|
||||
FDC_CMD EQU 0x20
|
||||
|
||||
; TRACK
|
||||
FDC_TRACK EQU 0x21
|
||||
|
||||
; SECTOR
|
||||
FDC_SECT EQU 0x22
|
||||
|
||||
; DATA
|
||||
FDC_DATA EQU 0x23
|
||||
|
||||
;
|
||||
FDC_WAIT EQU 0x24
|
||||
|
||||
; Controller port
|
||||
FLOPPY EQU 0x25
|
||||
|
||||
|
||||
; -------------------------------------------------------
|
||||
; КР580ВВ55 DD78
|
||||
; -------------------------------------------------------
|
||||
; Port A - Keyboard Data
|
||||
KBD_DD78PA EQU 0x40
|
||||
|
||||
; Port B - JST3,SHFT,CTRL,ACK,TAPE5,TAPE4,GK,GC
|
||||
KBD_DD78PB EQU 0x41
|
||||
|
||||
; Port C - [PC7..0]
|
||||
KBD_DD78PC EQU 0x42
|
||||
|
||||
; Сonfig: [1][ma1,ma0][0-aO|1-aI],[0-chO,1-chI],[mb],[0-bO|1-bI],[0-clO,1-clI]
|
||||
; Set bit: [0][xxx][bbb][0|1];
|
||||
KBD_DD78CTR EQU 0x43
|
||||
|
||||
|
||||
; -------------------------------------------------------
|
||||
; КР580ВИ53 DD70
|
||||
; -------------------------------------------------------
|
||||
; Counter 1
|
||||
TMR_DD70C1 EQU 0x60
|
||||
|
||||
; Counter 2
|
||||
TMR_DD70C2 EQU 0x61
|
||||
|
||||
; Counter 3
|
||||
TMR_DD70C3 EQU 0x62
|
||||
|
||||
; Config: [sc1,sc0][rl1,rl0][m2,m1,m0][bcd]
|
||||
; sc - timer, rl=01-LSB, 10-MSB, 11-LSB+MSB
|
||||
; mode 000 - int on fin,
|
||||
; 001 - one shot,
|
||||
; x10 - rate gen,
|
||||
; x11-sq wave
|
||||
TMR_DD70CTR EQU 0x63
|
||||
|
||||
; Programable Interrupt controller PIC KR580VV59
|
||||
PIC_DD75RS EQU 0x80
|
||||
PIC_DD75RM EQU 0x81
|
||||
|
||||
; -------------------------------------------------------
|
||||
; КР580ВВ51 DD72
|
||||
; -------------------------------------------------------
|
||||
; Data
|
||||
UART_DD72RD EQU 0xA0
|
||||
|
||||
; [RST,RQ_RX,RST_ERR,PAUSE,RX_EN,RX_RDY,TX_RDY]
|
||||
UART_DD72RR EQU 0xA1
|
||||
|
||||
; -------------------------------------------------------
|
||||
; КР580ВВ55 DD17
|
||||
; -------------------------------------------------------
|
||||
; Port A - VShift[8..1]
|
||||
SYS_DD17PA EQU 0xC0
|
||||
|
||||
; Port B - [ROM14,13][REST][ENROM-][A18,17,16][32k]
|
||||
SYS_DD17PB EQU 0xC1
|
||||
|
||||
; Port C - HShift[HS5..1,SB3..1]
|
||||
SYS_DD17PC EQU 0xC2
|
||||
|
||||
; Сonfig: [1][ma1,ma0][0-aO|1-aI],[0-chO,1-chI],[mb],[0-bO|1-bI],[0-clO,1-clI]
|
||||
; Set bit: [0][xxx][bbb][0|1];
|
||||
SYS_DD17CTR EQU 0xC3
|
||||
|
||||
; -------------------------------------------------------
|
||||
; КР580ВВ55 DD67
|
||||
; -------------------------------------------------------
|
||||
; Port A - LPT Data
|
||||
LPT_DD67PA EQU 0xE0
|
||||
|
||||
; Port B - [VSU,C/M,FL3..1,COL3..1]
|
||||
VID_DD67PB EQU 0xE1
|
||||
|
||||
; Port C - [USER3..1,STB-LP,BELL,TAPE3..1]
|
||||
DD67PC EQU 0xE2
|
||||
|
||||
; Сonfig: [1][ma1,ma0][0-aO|1-aI],[0-chO,1-chI],[mb],[0-bO|1-bI],[0-clO,1-clI]
|
||||
; Set bit: [0][xxx][bbb][0|1];
|
||||
DD67CTR EQU 0xE3
|
||||
|
||||
ENDIF
|
||||
35
ROMs/Sources/ROM-FDC/mon_entries.inc
Normal file
@ -0,0 +1,35 @@
|
||||
; ======================================================
|
||||
; Ocean-240.2
|
||||
;
|
||||
; Monitor entries to compile CP/M modules
|
||||
;
|
||||
; By Romych 2025-09-09
|
||||
; ======================================================
|
||||
|
||||
IFNDEF _MON_ENTRY
|
||||
DEFINE _MON_ENTRY
|
||||
|
||||
MODULE MON_ENTRY
|
||||
|
||||
mon_init EQU 0xe000
|
||||
mon_cold_start EQU 0xe003
|
||||
non_con_status EQU 0xe006
|
||||
mon_con_in EQU 0xe009
|
||||
mon_con_out EQU 0xe00c
|
||||
mon_serial_in EQU 0xe00f
|
||||
mpn_serial_out EQU 0xe012
|
||||
mon_char_print EQU 0xe015
|
||||
mon_tape_read EQU 0xe018
|
||||
mon_tape_write EQU 0xe01b
|
||||
ram_disk_read EQU 0xe01e
|
||||
ram_disk_write EQU 0xe021
|
||||
mon_res_f1 EQU 0xe024
|
||||
mon_res_f2 EQU 0xe027
|
||||
mon_tape_wait EQU 0xe02a
|
||||
mon_tape_detect EQU 0xe02d
|
||||
read_floppy EQU 0xe030
|
||||
write_floppy EQU 0xe033
|
||||
|
||||
ENDMODULE
|
||||
|
||||
ENDIF
|
||||
209
ROMs/Sources/ROM-FDC/tm_vars.inc
Normal file
@ -0,0 +1,209 @@
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
; Module TM_VARS - Turbo monitor variables
|
||||
; RAM Range: 0xBA09-0xBFFF
|
||||
;
|
||||
; Disassembled by Romych 2025-09-09
|
||||
; =======================================================
|
||||
|
||||
IFNDEF _TM_VARS
|
||||
DEFINE _TM_VARS
|
||||
|
||||
MODULE TM_VARS
|
||||
ORG 0xBA09
|
||||
|
||||
bdos_compcol db 0
|
||||
bdos_strtcol db 0
|
||||
bdos_column db 0
|
||||
bdos_listcp db 0
|
||||
bdos_kbchar db 0
|
||||
bdos_entsp ds 42, 0 ; 0xba0e
|
||||
BYTE_ram_ba38 dw 0
|
||||
BYTE_ram_ba3a dw 0
|
||||
BYTE_ram_ba3c dw 0
|
||||
BYTE_ram_ba3e dw 0
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Common values shared between bdosi and bdos
|
||||
; -------------------------------------------------------
|
||||
|
||||
; current user number
|
||||
bdos_usercode db 0x00 ; 0xba40
|
||||
|
||||
; current disk number
|
||||
bdos_curdsk db 0x00
|
||||
|
||||
; Information address
|
||||
bdos_info dw 0x0000 ; 0xba42
|
||||
|
||||
; address value to return
|
||||
bdos_aret dw 0x0000 ; 0xba44
|
||||
bdos_efcb db 0x00 ; 0xba46
|
||||
bdos_rodsk db 0x00 ; 0xba47
|
||||
BYTE_ram_ba48 db 0x00 ; 0xba48
|
||||
bdos_dlog dw 0x0000 ; 0xba49
|
||||
bdos_dmaad dw 0x0000 ; 0xba4b
|
||||
bdos_cdrmaxa dw 0x0000 ; 0xba4d
|
||||
bdos_curtrka dw 0x0000 ; 0xba4f
|
||||
bdos_curreca dw 0x0000 ; 0xba51
|
||||
bdos_buffa db 0x00 ; 0xba53
|
||||
BYTE_ram_ba54 db 0x00 ; 0xba54
|
||||
bdos_dpbaddr dw 0x0000 ; 0xba55
|
||||
BYTE_ram_ba57 dw 0x0000 ; 0xba57
|
||||
bdos_alloca dw 0x0000 ; 0xba59
|
||||
dbos_sectpt dw 0x0000 ; 0xba5b
|
||||
bdos_blkshf db 0x00 ; 0xba5d
|
||||
bdos_blmsk db 0x00 ; 0xba5e
|
||||
bdos_extmsk db 0x00 ; 0xba5f
|
||||
bdos_maxall dw 0x0000 ; 0xba60
|
||||
bdos_dirmax dw 0x0000 ; 0xba62
|
||||
bdos_dirblk dw 0x0000 ; 0xba64
|
||||
BYTE_ram_ba66 dw 0x0000 ; 0xba66
|
||||
bdos_offset dw 0x0000 ; 0xba68
|
||||
bdos_tranv dw 0x0000 ; 0xba6a
|
||||
bdos_fcb_copied db 0x00 ; 0xba6c
|
||||
bdos_rfm db 0x00 ; 0xba6d
|
||||
bdos_dirloc db 0x00 ; 0xba6e
|
||||
bdos_seqio db 0x00 ; 0xba6f
|
||||
bdos_linfo db 0x00 ; 0xba70
|
||||
bdos_dminx db 0x00 ; 0xba71
|
||||
bdos_searchl db 0x00 ; 0xba72
|
||||
bdos_searcha dw 0x0, 0x0 ; 0xba73
|
||||
bdos_single db 0x00 ; 0xba77
|
||||
bdos_resel db 0x00 ; 0xba78
|
||||
bdos_olddsk db 0x00 ; 0xba79
|
||||
bdos_fcbdsk db 0x00 ; 0xba7a
|
||||
bdos_rcount db 0x00 ; 0xba7b
|
||||
bdos_extval db 0x00 ; 0xba7c
|
||||
bdos_vrecord dw 0x0000 ; 0xba7d
|
||||
bdos_arecord db 0x00 ; 0xba7f
|
||||
BYTE_ram_ba80 db 0x00 ; 0xba80
|
||||
bdos_arecord1 dw 0x0000 ; 0xba81
|
||||
bdos_dptr db 0x00 ; 0xba83
|
||||
bdos_dcnt db 0x00 ; 0xba84
|
||||
bdos_dcnt_hi db 0x00 ; 0xba85
|
||||
bdos_drec ds 20, 0x00 ; 0xba86
|
||||
tmp_dir_total dw 0x0000 ; 0xba9a
|
||||
saved_stack_ptr ds 22, 0x00 ; 0xba9c
|
||||
WORD_ram_bab2 dw 0x0000 ; 0xbab2
|
||||
safe_stack_ptr dw 0x0000 ; 0xbab4
|
||||
|
||||
; --------------------------------------------------
|
||||
; FCB
|
||||
; --------------------------------------------------
|
||||
; FCB offset 0 - drive letter to write file
|
||||
ccp_FCB db 0x00 ; 0xbab6
|
||||
; filename to write file
|
||||
ccp_FCB_fn ds 31,0x00 ; 0xbab7
|
||||
|
||||
ccp_FCB_CR db 0x00 ; Current record
|
||||
cco_FCB_Rn db 0x00 ; Random access record number
|
||||
dw 0x00
|
||||
dw 0x00
|
||||
dw 0x00
|
||||
|
||||
DPH_base ds 78, 0x00 ; 0xbade
|
||||
cur_disk db 0x00 ; 0xbb2c
|
||||
dma_addr dw 0x0000 ; 0xbb2d
|
||||
curr_track db 0x00 ; 0xbb2f
|
||||
curr_sec db 0x00 ; 0xbb30
|
||||
slicer_disk db 0x00 ; 0xbb31
|
||||
slicer_track db 0x00 ; 0xbb32
|
||||
slicer_real_sector db 0x00 ; 0xbb33
|
||||
tmp_slicer_real_sector db 0x00 ; 0xbb34
|
||||
slicer_has_data db 0x00 ; 0xbb35
|
||||
slicer_need_save db 0x00 ; 0xbb36
|
||||
|
||||
slicer_uninited_count db 0x00 ; 0xbb37
|
||||
slicer_uninited_disk db 0x00 ; 0xbb38
|
||||
slicer_uninited_track db 0x00 ; 0xbb39
|
||||
slicer_uninited_sector_128 db 0x00 ; 0xbb3a
|
||||
tmp_slicer_result db 0x00 ; 0xbb3b
|
||||
tmp_slicer_can_read db 0x00 ; 0xbb3c
|
||||
tmp_slicer_operation db 0x00 ; 0xbb3d
|
||||
tmp_slicer_flush db 0x00 ; 0xbb3e
|
||||
ds 449, 0x00
|
||||
slicer_buffer ds 512, 0x00 ; 0xbd00
|
||||
|
||||
tm_stack ds 80, 0x00 ; 0xbf00 search text or buffer to search?
|
||||
tm_ltb ds 32, 0x00 ; 0xbf50
|
||||
tm_strt ds 16, 0x00 ; 0xbf70
|
||||
tm_track_no db 0x00 ; 0xbf80
|
||||
tm_sector_no db 0x00 ; 0xbf81
|
||||
tm_num_sect db 0x00 ; 0xbf82
|
||||
tm_disk_op db 0x00 ; 0xbf83
|
||||
tm_rw_disk db 0x00 ; 0xbf84
|
||||
tm_drive dw 0x00 ; 0xbf85
|
||||
tm_tbu db 0x00 ; 0xbf87
|
||||
|
||||
; user entered command buffer
|
||||
tm_hrg ds 48, 0x00 ; 0xbf88
|
||||
tm_stack_top dw 0x0000 ; 0xbfb8
|
||||
tm_stsp dw 0x0, 0x0, 0x0 ; 0xbfba
|
||||
rst_af_save dw 0x0000 ; 0xbfc0
|
||||
rst_bc_save dw 0x0000 ; 0xbfc2
|
||||
rst_de_save dw 0x00 ; 0xbfc4
|
||||
rst_hl_save dw 0x00 ; 0xbfc6
|
||||
rst_sp_save dw 0x0000 ; 0xbfc8
|
||||
rst_ret_JP db 0x00 ; 0xbfca
|
||||
rst_ret_addr dw 0x00 ; 0xbfcb
|
||||
db 0
|
||||
dw 0x00, 0x00
|
||||
tm_stack_0 dw 0x00, 0x00 ; 0xbfd2
|
||||
db 0x00 ; 0xbfd6
|
||||
dw 0x0000 ; 0xbfd7
|
||||
m_esc_mode db 0x00 ; 0xbfd9
|
||||
m_esc_cmd db 0x00 ; 0xbfda
|
||||
m_esc_param_cnt db 0x00 ; 0xbfdb
|
||||
m_esc_param_1 db 0x00 ; 0xbfdc
|
||||
m_esc_param_2 db 0x00 ; 0xbfdd
|
||||
m_esc_param_3 db 0x00 ; 0xbfde
|
||||
m_esc_param_4 db 0x00 ; 0xbfdf
|
||||
m_esc_hex_cmd db 0x00 ; 0xbfe0
|
||||
m_esc_param_6 db 0x00 ; 0xbfe1
|
||||
ds 4, 0x00 ; 0xbfe2
|
||||
m_screen_mode db 0x00 ; 0xbfe6
|
||||
m_cursor_row db 0x00 ; 0xbfe7
|
||||
m_cursor_col db 0x00 ; 0xbfe8
|
||||
m_curr_color dw 0x0000 ; 0xbfe9
|
||||
m_row_shift db 0x00 ; 0xbfeb
|
||||
m_codepage db 0x00 ; 0xbfec
|
||||
m_cur_palette db 0x00 ; 0xbfed
|
||||
m_beep_period dw 0x0000 ; 0xbfee
|
||||
m_beep_duration dw 0x0000 ; 0xbff0
|
||||
m_pix_shift db 0x00 ; 0xbff2
|
||||
m_strobe_state db 0x00 ; 0xbff3
|
||||
m_print_pos_x dw 0x0000 ; 0xbff4
|
||||
dw 0x0000
|
||||
dw 0x0000
|
||||
m_last_key db 0x00 ; 0xbffa
|
||||
m_last_shifts db 0x00 ; 0xbffb
|
||||
mc_fix_state db 0x00 ; 0xbffc
|
||||
mc_stored_key db 0x00 ; 0xbffd
|
||||
|
||||
ASSERT tm_stack_top = 0xbfb8
|
||||
ASSERT tmp_dir_total = 0xba9a
|
||||
ASSERT saved_stack_ptr= 0xba9c
|
||||
ASSERT WORD_ram_bab2 = 0xbab2
|
||||
ASSERT ccp_FCB_fn = 0xbab7
|
||||
ASSERT DPH_base = 0xbade
|
||||
ASSERT slicer_uninited_count = 0xbb37
|
||||
ASSERT slicer_buffer = 0xbd00
|
||||
ASSERT tm_stack = 0xbf00
|
||||
ASSERT tm_hrg = 0xbf88
|
||||
ASSERT rst_hl_save = 0xbfc6
|
||||
ASSERT rst_ret_addr = 0xbfcb
|
||||
ASSERT tm_stack_0 = 0xbfd2
|
||||
ASSERT m_esc_mode = 0xbfd9
|
||||
ASSERT m_screen_mode = 0xbfe6
|
||||
ASSERT mc_stored_key = 0xbffd
|
||||
|
||||
; DISPLAY " BYTE_ram_bfd2 is: ", BYTE_ram_bfd2
|
||||
; DISPLAY " m_esc_mode is: ", m_esc_mode
|
||||
; DISPLAY " rst_ret_addr is: ", rst_ret_addr
|
||||
; DISPLAY " tm_stack_top is: ", tm_stack_top
|
||||
; DISPLAY " mc_stored_key is: ", mc_stored_key
|
||||
|
||||
ENDMODULE
|
||||
|
||||
ENDIF
|
||||