;-------------------------------------------------------------------------------------------------------- ;- ;- Name: TZFS_Definitions.asm ;- Created: September 2019 ;- Author(s): Philip Smart ;- Description: Sharp MZ series tzfs (tranZPUter Filing System). ;- This assembly language program is a branch from the original RFS written for the ;- MZ80A_RFS upgrade board. It is adapted to work within the similar yet different ;- environment of the tranZPUter SW which has a large RAM capacity (512K) and an ;- I/O processor in the K64F/ZPU. ;- ;- Credits: ;- Copyright: (c) 2019-21 Philip Smart ;- ;- History: May 2020 - Branch taken from RFS v2.0 and adapted for the tranZPUter SW. ;- July 2020 - Updates to accommodate v2.1 of the tranZPUter board. ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify ;- it under the terms of the GNU General Public License as published ;- by the Free Software Foundation, either version 3 of the License, or ;- (at your option) any later version. ;- ;- This source file is distributed in the hope that it will be useful, ;- but WITHOUT ANY WARRANTY; without even the implied warranty of ;- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;- GNU General Public License for more details. ;- ;- You should have received a copy of the GNU General Public License ;- along with this program. If not, see . ;-------------------------------------------------------------------------------------------------------- ;----------------------------------------------- ; Features. ;----------------------------------------------- BUILD_MZ80A EQU 0 ; Build for the standard Sharp MZ80A, no lower memory. BUILD_MZ700 EQU 1 ; Build for the Sharp MZ-700 base hardware. ;----------------------------------------------- ; Entry/compilation start points. ;----------------------------------------------- MROMADDR EQU 00000H ; Start of SA1510 Monitor ROM. UROMADDR EQU 0E800H ; Start of User ROM Address space. UROMBSTBL EQU UROMADDR + 020H ; Entry point to the bank switching table. TZFSJMPTABLE EQU UROMADDR + 00080H ; Start of jump table. BANKRAMADDR EQU 0F000H ; Start address of the banked RAM used for TZFS functionality. FDCROMADDR EQU 0F000H FDCJMP1 EQU 0F3FEH ; ROM paged vector 1. FDCJMP2 EQU 0F7FEH ; ROM paged vector 2. FDCJMP3 EQU 0F7FEH ; ROM paged vector 3. FDCJMP4 EQU 0F7FEH ; ROM paged vector 4. PRGBOOTJMP EQU 0CF00H ; Location to load bootstrap for original host program. ;----------------------------------------------- ; Common character definitions. ;----------------------------------------------- SCROLL EQU 001H ;Set scroll direction UP. BELL EQU 007H SPACE EQU 020H TAB EQU 009H ;TAB ACROSS (8 SPACES FOR SD-BOARD) CR EQU 00DH LF EQU 00AH FF EQU 00CH CS EQU 0CH ; Clear screen DELETE EQU 07FH BACKS EQU 008H SOH EQU 1 ; For XModem etc. EOT EQU 4 ACK EQU 6 NAK EQU 015H NUL EQU 000H NULL EQU 000H CTRL_A EQU 001H CTRL_B EQU 002H CTRL_C EQU 003H CTRL_D EQU 004H CTRL_E EQU 005H CTRL_F EQU 006H CTRL_G EQU 007H CTRL_H EQU 008H CTRL_I EQU 009H CTRL_J EQU 00AH CTRL_K EQU 00BH CTRL_L EQU 00CH CTRL_M EQU 00DH CTRL_N EQU 00EH CTRL_O EQU 00FH CTRL_P EQU 010H CTRL_Q EQU 011H CTRL_R EQU 012H CTRL_S EQU 013H CTRL_T EQU 014H CTRL_U EQU 015H CTRL_V EQU 016H CTRL_W EQU 017H CTRL_X EQU 018H CTRL_Y EQU 019H CTRL_Z EQU 01AH ESC EQU 01BH CTRL_SLASH EQU 01CH CTRL_LB EQU 01BH CTRL_RB EQU 01DH CTRL_CAPPA EQU 01EH CTRL_UNDSCR EQU 01FH CTRL_AT EQU 000H NOKEY EQU 0F0H CURSRIGHT EQU 0F1H CURSLEFT EQU 0F2H CURSUP EQU 0F3H CURSDOWN EQU 0F4H DBLZERO EQU 0F5H INSERT EQU 0F6H CLRKEY EQU 0F7H HOMEKEY EQU 0F8H BREAKKEY EQU 0FBH GRAPHKEY EQU 0FCH ALPHAKEY EQU 0FDH ;------------------------------------------------------- ; Function entry points in the standard SA-1510 Monitor. ;------------------------------------------------------- GETL: EQU 00003h LETNL: EQU 00006h NL: EQU 00009h PRNTS: EQU 0000Ch PRNT: EQU 00012h MSG: EQU 00015h MSGX: EQU 00018h GETKY EQU 0001Bh BRKEY EQU 0001Eh ?WRI EQU 00021h ?WRD EQU 00024h ?RDI EQU 00027h ?RDD EQU 0002Ah ?VRFY EQU 0002Dh MELDY EQU 00030h ?TMST EQU 00033h MONIT: EQU 00000h ;SS: EQU 00089h ;ST1: EQU 00095h HLHEX EQU 00410h _2HEX EQU 0041Fh ;?MODE: EQU 0074DH ;?KEY EQU 008CAh PRNT3 EQU 0096Ch ?ADCN EQU 00BB9h ?DACN EQU 00BCEh ?DSP: EQU 00DB5H ?BLNK EQU 00DA6h ?DPCT EQU 00DDCh PRTHL: EQU 003BAh PRTHX: EQU 003C3h HEX: EQU 003F9h DPCT: EQU 00DDCh ;DLY12: EQU 00DA7h ;DLY12A: EQU 00DAAh ?RSTR1: EQU 00EE6h ;MOTOR: EQU 006A3H CKSUM: EQU 0071AH GAP: EQU 0077AH ;WTAPE: EQU 00485H MSTOP: EQU 00700H ; ROM location differences between the MZ80A and MZ-700. IF BUILD_MZ80A > 0 SS: EQU 00089h ST1: EQU 00095h WTAPE: EQU 00485H MOTOR: EQU 006A3H ?MODE: EQU 0074DH ?KEY EQU 008CAh DLY12: EQU 00DA7h DLY12A: EQU 00DAAh ELSE SS: EQU 000A2H ST1: EQU 000ADH WTAPE: EQU 0048AH MOTOR: EQU 0069FH ?MODE: EQU 0073EH ?KEY EQU 009B3H DLY12: EQU 00996H ENDIF ; Debugging ENADEBUG EQU 0 ; Enable debugging logic, 1 = enable, 0 = disable ;----------------------------------------------- ; Memory mapped ports in hardware. ;----------------------------------------------- SCRN: EQU 0D000H ARAM: EQU 0D800H DSPCTL: EQU 0DFFFH ; Screen 40/80 select register (bit 7) KEYPA: EQU 0E000h KEYPB: EQU 0E001h KEYPC: EQU 0E002h KEYPF: EQU 0E003h CSTR: EQU 0E002h CSTPT: EQU 0E003h CONT0: EQU 0E004h CONT1: EQU 0E005h CONT2: EQU 0E006h CONTF: EQU 0E007h SUNDG: EQU 0E008h TEMP: EQU 0E008h MEMSW: EQU 0E00CH MEMSWR: EQU 0E010H INVDSP: EQU 0E014H NRMDSP: EQU 0E015H SCLDSP: EQU 0E200H SCLBASE: EQU 0E2H ;----------------------------------------------- ; IO ports in hardware and values. ;----------------------------------------------- MMCFG EQU 060H ; Memory management configuration latch. SETXMHZ EQU 062H ; Select the alternate clock frequency. SET2MHZ EQU 064H ; Select the system 2MHz clock frequency. CLKSELRD EQU 066H ; Read clock selected setting, 0 = 2MHz, 1 = XMHz SVCREQ EQU 068H ; I/O Processor service request. CPUCFG EQU 06CH ; Version 2.2 CPU configuration register. CPUSTATUS EQU 06CH ; Version 2.2 CPU runtime status register. CPUINFO EQU 06DH ; Version 2.2 CPU information register. CPLDCFG EQU 06EH ; Version 2.1 CPLD configuration register. CPLDSTATUS EQU 06EH ; Version 2.1 CPLD status register. CPLDINFO EQU 06FH ; Version 2.1 CPLD version information register. GDCRTC EQU 0CFH ; MZ-800 CRTC control register GDCMD EQU 0CEH ; MZ-800 CRTC Mode register GDGRF EQU 0CDH ; MZ-800 read format register GDGWF EQU 0CCH ; MZ-800 write format register PALSLCTOFF EQU 0D3H ; set the palette slot Off position to be adjusted. PALSLCTON EQU 0D4H ; set the palette slot On position to be adjusted. PALSETRED EQU 0D5H ; set the red palette value according to the PALETTE_PARAM_SEL address. PALSETGREEN EQU 0D6H ; set the green palette value according to the PALETTE_PARAM_SEL address. PALSETBLUE EQU 0D7H ; set the blue palette value according to the PALETTE_PARAM_SEL address. MMIO0 EQU 0E0H ; MZ-700/MZ-800 Memory Management Set 0 MMIO1 EQU 0E1H ; MZ-700/MZ-800 Memory Management Set 1 MMIO2 EQU 0E2H ; MZ-700/MZ-800 Memory Management Set 2 MMIO3 EQU 0E3H ; MZ-700/MZ-800 Memory Management Set 3 MMIO4 EQU 0E4H ; MZ-700/MZ-800 Memory Management Set 4 MMIO5 EQU 0E5H ; MZ-700/MZ-800 Memory Management Set 5 MMIO6 EQU 0E6H ; MZ-700/MZ-800 Memory Management Set 6 MMIO7 EQU 0E7H ; MZ-700/MZ-800 Memory Management Set 7 SYSCTRL EQU 0F0H ; System board control register. [2:0] - 000 MZ80A Mode, 2MHz CPU/Bus, 001 MZ80B Mode, 4MHz CPU/Bus, 010 MZ700 Mode, 3.54MHz CPU/Bus. VMBORDER EQU 0F3H ; Select VGA Border colour attributes. Bit 2 = Red, 1 = Green, 0 = Blue. GRAMMODE EQU 0F4H ; MZ80B Graphics mode. Bit 0 = 0, Write to Graphics RAM I, Bit 0 = 1, Write to Graphics RAM II. Bit 1 = 1, blend Graphics RAM I output on display, Bit 2 = 1, blend Graphics RAM II output on display. VMPALETTE EQU 0F5H ; Select Palette: ; 0xF5 sets the palette. The Video Module supports 4 bit per colour output but there is only enough RAM for 1 bit per colour so the pallette is used to change the colours output. ; Bits [7:0] defines the pallete number. This indexes a lookup table which contains the required 4bit output per 1bit input. ; GPU: GPUPARAM EQU 0F6H ; 0xF6 set parameters. Store parameters in a long word to be used by the graphics command processor. ; The parameter word is 128 bit and each write to the parameter word shifts left by 8 bits and adds the new byte at bits 7:0. GPUCMD EQU 0F7H ; 0xF7 set the graphics processor unit commands. GPUSTATUS EQU 0F7H ; [7;1] - FSM state, [0] - 1 = busy, 0 = idle ; Bits [5:0] - 0 = Reset parameters. ; 1 = Clear to val. Start Location (16 bit), End Location (16 bit), Red Filter, Green Filter, Blue Filter ; VMCTRL EQU 0F8H ; Video Module control register. [2:0] - 000 (default) = MZ80A, 001 = MZ-700, 010 = MZ800, 011 = MZ80B, 100 = MZ80K, 101 = MZ80C, 110 = MZ1200, 111 = MZ2000. [3] = 0 - 40 col, 1 - 80 col. VMGRMODE EQU 0F9H ; Video Module graphics mode. 7/6 = Operator (00=OR,01=AND,10=NAND,11=XOR), 5=GRAM Output Enable, 4 = VRAM Output Enable, 3/2 = Write mode (00=Page 1:Red, 01=Page 2:Green, 10=Page 3:Blue, 11=Indirect), 1/0=Read mode (00=Page 1:Red, 01=Page2:Green, 10=Page 3:Blue, 11=Not used). VMREDMASK EQU 0FAH ; Video Module Red bit mask (1 bit = 1 pixel, 8 pixels per byte). VMGREENMASK EQU 0FBH ; Video Module Green bit mask (1 bit = 1 pixel, 8 pixels per byte). VMBLUEMASK EQU 0FCH ; Video Module Blue bit mask (1 bit = 1 pixel, 8 pixels per byte). VMPAGE EQU 0FDH ; Video Module memory page register. [1:0] switches in 1 16Kb page (3 pages) of graphics ram to C000 - FFFF. Bits [1:0] = page, 00 = off, 01 = Red, 10 = Green, 11 = Blue. This overrides all MZ700/MZ80B page switching functions. [7] 0 - normal, 1 - switches in CGROM for upload at D000:DFFF. ;----------------------------------------------- ; CPLD Configuration constants. ;----------------------------------------------- MODE_MZ80K EQU 0 ; Set to MZ-80K mode. MODE_MZ80C EQU 1 ; Set to MZ-80C mode. MODE_MZ1200 EQU 2 ; Set to MZ-1200 mode. MODE_MZ80A EQU 3 ; Set to MZ-80A mode (base mode on MZ-80A hardware). MODE_MZ700 EQU 4 ; Set to MZ-700 mode (base mode on MZ-700 hardware). MODE_MZ800 EQU 5 ; Set to MZ-800 mode. MODE_MZ80B EQU 6 ; Set to MZ-80B mode. MODE_MZ2000 EQU 7 ; Set to MZ-2000 mode. MODE_VIDEO_FPGA EQU 8 ; Bit flag (bit 3) to switch CPLD into using the new FPGA video hardware. ;----------------------------------------------- ; FPGA CPU enhancement control bits. ;----------------------------------------------- CPUMODE_SET_Z80 EQU 000H ; Set the CPU to the hard Z80. CPUMODE_SET_T80 EQU 001H ; Set the CPU to the soft T80. CPUMODE_SET_ZPU_EVO EQU 002H ; Set the CPU to the soft ZPU Evolution. CPUMODE_SET_AAA EQU 004H ; Place holder for a future soft CPU. CPUMODE_SET_BBB EQU 008H ; Place holder for a future soft CPU. CPUMODE_SET_CCC EQU 010H ; Place holder for a future soft CPU. CPUMODE_SET_DDD EQU 020H ; Place holder for a future soft CPU. CPUMODE_IS_Z80 EQU 000H ; Status value to indicate if the hard Z80 available. CPUMODE_IS_T80 EQU 001H ; Status value to indicate if the soft T80 available. CPUMODE_IS_ZPU_EVO EQU 002H ; Status value to indicate if the soft ZPU Evolution available. CPUMODE_IS_AAA EQU 004H ; Place holder to indicate if a future soft CPU is available. CPUMODE_IS_BBB EQU 008H ; Place holder to indicate if a future soft CPU is available. CPUMODE_IS_CCC EQU 010H ; Place holder to indicate if a future soft CPU is available. CPUMODE_IS_DDD EQU 020H ; Place holder to indicate if a future soft CPU is available. CPUMODE_RESET_CPU EQU 080H ; Reset the soft CPU. Active high, when high the CPU is held in RESET, when low the CPU runs. CPUMODE_IS_SOFT_AVAIL EQU 040H ; Marker to indicate if the underlying FPGA can support soft CPU's. CPUMODE_IS_SOFT_MASK EQU 0C0H ; Mask to filter out the Soft CPU availability flags. CPUMODE_IS_CPU_MASK EQU 03FH ; Mask to filter out which soft CPU's are available. ;----------------------------------------------- ; Video Module control bits. ;----------------------------------------------- MODE_80CHAR EQU 008H ; Enable 80 character display. MODE_COLOUR EQU 010H ; Enable colour display. SYSMODE_MZ80A EQU 000H ; System board mode MZ80A, 2MHz CPU/Bus. SYSMODE_MZ80B EQU 001H ; System board mode MZ80B, 4MHz CPU/Bus. SYSMODE_MZ700 EQU 002H ; System board mode MZ700, 3.54MHz CPU/Bus. VMMODE_MZ80K EQU 000H ; Video mode = MZ80K VMMODE_MZ80C EQU 001H ; Video mode = MZ80C VMMODE_MZ1200 EQU 002H ; Video mode = MZ1200 VMMODE_MZ80A EQU 003H ; Video mode = MZ80A VMMODE_MZ700 EQU 004H ; Video mode = MZ700 VMMODE_MZ800 EQU 005H ; Video mode = MZ800 VMMODE_MZ80B EQU 006H ; Video mode = MZ80B VMMODE_MZ2000 EQU 007H ; Video mode = MZ2000 VMMODE_PCGRAM EQU 020H ; Enable PCG RAM. VMMODE_VGA_OFF EQU 000H ; Set VGA mode off, external monitor is driven by standard internal signals. VMMODE_VGA_640x480 EQU 040H ; Set external monitor to VGA 640x480 @ 60Hz mode. VMMODE_VGA_1024x768 EQU 080H ; Set external monitor to VGA 1024x768 @ 60Hz mode. VMMODE_VGA_800x600 EQU 0C0H ; Set external monitor to VGA 800x600 @ 60Hz mode. ;----------------------------------------------- ; GPU commands. ;----------------------------------------------- GPUCLEARVRAM EQU 001H ; Clear the VRAM without updating attributes. GPUCLEARVRAMCA EQU 002H ; Clear the VRAM/ARAM with given attribute byte, GPUCLEARVRAMP EQU 003H ; Clear the VRAM/ARAM with parameters. GPUCLEARGRAM EQU 081H ; Clear the entire Framebuffer. GPUCLEARGRAMP EQU 082H ; Clear the Framebuffer according to parameters. GPURESET EQU 0FFH ; Reset the GPU, return to idle state. ;----------------------------------------------- ; tranZPUter SW Memory Management modes ;----------------------------------------------- TZMM_ENIOWAIT EQU 020H ; Memory management IO Wait State enable - insert a wait state when an IO operation to E0-FF is executed. TZMM_ORIG EQU 000H ; Original Sharp MZ80A mode, no tranZPUter features are selected except the I/O control registers (default: 0x60-063). TZMM_BOOT EQU 001H ; Original mode but E800-EFFF is mapped to tranZPUter RAM so TZFS can be booted. TZMM_TZFS EQU 002H + TZMM_ENIOWAIT ; TZFS main memory configuration. all memory is in tranZPUter RAM, E800-FFFF is used by TZFS, SA1510 is at 0000-1000 and RAM is 1000-CFFF, 64K Block 0 selected. TZMM_TZFS2 EQU 003H + TZMM_ENIOWAIT ; TZFS main memory configuration. all memory is in tranZPUter RAM, E800-EFFF is used by TZFS, SA1510 is at 0000-1000 and RAM is 1000-CFFF, 64K Block 0 selected, F000-FFFF is in 64K Block 1. TZMM_TZFS3 EQU 004H + TZMM_ENIOWAIT ; TZFS main memory configuration. all memory is in tranZPUter RAM, E800-EFFF is used by TZFS, SA1510 is at 0000-1000 and RAM is 1000-CFFF, 64K Block 0 selected, F000-FFFF is in 64K Block 2. TZMM_TZFS4 EQU 005H + TZMM_ENIOWAIT ; TZFS main memory configuration. all memory is in tranZPUter RAM, E800-EFFF is used by TZFS, SA1510 is at 0000-1000 and RAM is 1000-CFFF, 64K Block 0 selected, F000-FFFF is in 64K Block 3. TZMM_CPM EQU 006H + TZMM_ENIOWAIT ; CPM main memory configuration, all memory on the tranZPUter board, 64K block 4 selected. Special case for F3C0:F3FF & F7C0:F7FF (floppy disk paging vectors) which resides on the mainboard. TZMM_CPM2 EQU 007H + TZMM_ENIOWAIT ; CPM main memory configuration, F000-FFFF are on the tranZPUter board in block 4, 0040-CFFF and E800-EFFF are in block 5, mainboard for D000-DFFF (video), E000-E800 (Memory control) selected. ; Special case for 0000:003F (interrupt vectors) which resides in block 4, F3C0:F3FF & F7C0:F7FF (floppy disk paging vectors) which resides on the mainboard. TZMM_COMPAT EQU 008H + TZMM_ENIOWAIT ; Original mode but with main DRAM in Bank 0 to allow bootstrapping of programs from other machines such as the MZ700. TZMM_HOSTACCESS EQU 009H + TZMM_ENIOWAIT ; Mode to allow code running in Bank 0, address E800:FFFF to access host memory. Monitor ROM 0000-0FFF and Main DRAM 0x1000-0xD000, video and memory mapped I/O are on the host machine, User/Floppy ROM E800-FFFF are in tranZPUter memory. TZMM_MZ700_0 EQU 00AH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the mainboard. TZMM_MZ700_1 EQU 00BH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 0, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the tranZPUter in block 6. TZMM_MZ700_2 EQU 00CH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the tranZPUter in block 6. TZMM_MZ700_3 EQU 00DH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 0, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is inaccessible. TZMM_MZ700_4 EQU 00EH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is inaccessible. TZMM_MZ800 EQU 00FH + TZMM_ENIOWAIT ; MZ800 Mode - Tracks original hardware mode offering MZ700/MZ800 configurations. TZMM_FPGA EQU 015H + TZMM_ENIOWAIT ; Open up access for the K64F to the FPGA resources such as memory. All other access to RAM or mainboard is blocked. TZMM_TZPUM EQU 016H + TZMM_ENIOWAIT ; Everything in on mainboard, no access to tranZPUter memory. TZMM_TZPU EQU 017H + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 0 is selected. TZMM_TZPU0 EQU 018H + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 0 is selected. TZMM_TZPU1 EQU 019H + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 1 is selected. TZMM_TZPU2 EQU 01AH + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 2 is selected. TZMM_TZPU3 EQU 01BH + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 3 is selected. TZMM_TZPU4 EQU 01CH + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 4 is selected. TZMM_TZPU5 EQU 01DH + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 5 is selected. TZMM_TZPU6 EQU 01EH + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 6 is selected. TZMM_TZPU7 EQU 01FH + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 7 is selected. ;----------------------------------------------- ; TZ File System Header (MZF) ;----------------------------------------------- TZFS_ATRB: EQU 00000h ; Code Type, 01 = Machine Code. TZFS_NAME: EQU 00001h ; Title/Name (17 bytes). TZFS_SIZE: EQU 00012h ; Size of program. TZFS_DTADR: EQU 00014h ; Load address of program. TZFS_EXADR: EQU 00016h ; Exec address of program. TZFS_COMNT: EQU 00018h ; Comment TZFS_MZFLEN: EQU 128 ; Length of the MZF header. TZFS_CMTLEN: EQU 104 ; Length of the comment field ;----------------------------------------------- ; Entry/compilation start points. ;----------------------------------------------- TPSTART: EQU 010F0h MEMSTART: EQU 01200h MSTART: EQU 0E900h MZFHDRSZ EQU 128 TZFSSECTSZ EQU 256 MROMSIZE EQU 4096 UROMSIZE EQU 2048 FNSIZE EQU 17 ;----------------------------------------------- ; RAM Banks, 0-3 are reserved for TZFS code in ; the User/Floppy ROM bank area. ;----------------------------------------------- USRROMPAGES EQU 3 ; User ROM ROMBANK0 EQU 0 ; TZFS Bank 0 - Main RFS Entry point and functions. ROMBANK1 EQU 1 ; TZFS Bank 1 - ROMBANK2 EQU 2 ; TZFS Bank 2 - ROMBANK3 EQU 3 ; TZFS Bank 3 - OBJCD EQU 001H ; MZF contains a binary object. BTX1CD EQU 002H ; MZF contains a BASIC program. BTX2CD EQU 005H ; MZF contains a BASIC program. TZOBJCD0 EQU 0F8H ; MZF contains a TZFS binary object for page 0. TZOBJCD1 EQU 0F9H TZOBJCD2 EQU 0FAH TZOBJCD3 EQU 0FBH TZOBJCD4 EQU 0FCH TZOBJCD5 EQU 0FDH TZOBJCD6 EQU 0FEH TZOBJCD7 EQU 0FFH ; MZF contains a TZFS binary object for page 7. ;----------------------------------------------- ; SA-1510 MONITOR WORK AREA (MZ80A) ;----------------------------------------------- STACK: EQU 010F0H ; ORG STACK ; SPV: IBUFE: ; TAPE BUFFER (128 BYTES) ATRB: DS virtual 1 ; ATTRIBUTE NAME: DS virtual FNSIZE ; FILE NAME SIZE: DS virtual 2 ; BYTESIZE DTADR: DS virtual 2 ; DATA ADDRESS EXADR: DS virtual 2 ; EXECUTION ADDRESS COMNT: DS virtual 92 ; COMMENT SWPW: DS virtual 10 ; SWEEP WORK KDATW: DS virtual 2 ; KEY WORK KANAF: DS virtual 1 ; KANA FLAG (01=GRAPHIC MODE) DSPXY: DS virtual 2 ; DISPLAY COORDINATES MANG: DS virtual 6 ; COLUMN MANAGEMENT MANGE: DS virtual 1 ; COLUMN MANAGEMENT END PBIAS: DS virtual 1 ; PAGE BIAS ROLTOP: DS virtual 1 ; ROLL TOP BIAS MGPNT: DS virtual 1 ; COLUMN MANAG. POINTER PAGETP: DS virtual 2 ; PAGE TOP ROLEND: DS virtual 1 ; ROLL END DS virtual 14 ; BIAS FLASH: DS virtual 1 ; FLASHING DATA SFTLK: DS virtual 1 ; SHIFT LOCK REVFLG: DS virtual 1 ; REVERSE FLAG SPAGE: DS virtual 1 ; PAGE CHANGE FLSDT: DS virtual 1 ; CURSOR DATA STRGF: DS virtual 1 ; STRING FLAG DPRNT: DS virtual 1 ; TAB COUNTER TMCNT: DS virtual 2 ; TAPE MARK COUNTER SUMDT: DS virtual 2 ; CHECK SUM DATA CSMDT: DS virtual 2 ; FOR COMPARE SUM DATA AMPM: DS virtual 1 ; AMPM DATA TIMFG: DS virtual 1 ; TIME FLAG SWRK: DS virtual 1 ; KEY SOUND FLAG TEMPW: DS virtual 1 ; TEMPO WORK ONTYO: DS virtual 1 ; ONTYO WORK OCTV: DS virtual 1 ; OCTAVE WORK RATIO: DS virtual 2 ; ONPU RATIO BUFER: DS virtual 81 ; GET LINE BUFFER ; Starting EC80H - variables used by the filing system. ORG TZVARMEM TZVARMEM: EQU 0EC80H TZVARSIZE: EQU 00100H WARMSTART: DS virtual 1 ; Warm start mode, 0 = cold start, 1 = warm start. SCRNMODE: DS virtual 1 ; Mode of screen, [0] = 0 - 40 char, 1 - 80 char, [1] = 0 - Mainboard video, 1 - FPGA Video, [4:2] Video mode, [7:6] - VGA mode. MMCFGVAL: DS virtual 1 ; Current memory model value. HLSAVE: DS virtual 2 ; Storage for HL during bank switch manipulation. AFSAVE: DS virtual 2 ; Storage for AF during bank switch manipulation. FNADDR: DS virtual 2 ; Function to be called address. TMPADR: DS virtual 2 ; TEMPORARY ADDRESS STORAGE TMPSIZE: DS virtual 2 ; TEMPORARY SIZE TMPCNT: DS virtual 2 ; TEMPORARY COUNTER TMPLINECNT: DS virtual 2 ; Temporary counter for displayed lines. TMPSTACKP: DS virtual 2 ; Temporary stack pointer save. DUMPADDR: DS virtual 2 ; Address used by the D(ump) command so that calls without parameters go onto the next block. CMTLOLOAD: DS virtual 1 ; Flag to indicate that a tape program is loaded into hi memory then shifted to low memory after ROM pageout. CMTCOPY: DS virtual 1 ; Flag to indicate that a CMT copy operation is taking place. CMTAUTOEXEC: DS virtual 1 ; Auto execution flag, run CMT program when loaded if flag clear. DTADRSTORE: DS virtual 2 ; Backup for load address if actual load shifts to lo memory or to 0x1200 for copy. SDCOPY: DS virtual 1 ; Flag to indicate an SD copy is taking place, either CMT->SD or SD->CMT. RESULT: DS virtual 1 ; Result variable needed for interbank calls when a result is needed. SDAUTOEXEC: DS virtual 1 ; Flag to indicate if a loaded file should be automatically executed. FDCCMD: DS virtual 1 ; Floppy disk command storage. MOTON: DS virtual 1 ; Motor on flag. TRK0FD1: DS virtual 1 ; Floppy Disk 1 track 0 indicator. TRK0FD2: DS virtual 1 ; Floppy Disk 2 track 0 indicator. TRK0FD3: DS virtual 1 ; Floppy Disk 3 track 0 indicator. TRK0FD4: DS virtual 1 ; Floppy Disk 4 track 0 indicator. RETRIES: DS virtual 1 ; Retries count for a command. BPARA: DS virtual 1 CMTINACTIVE: DS virtual 1 ; Flag to indicate if the CMT is inactive (1)/SD active (0) for the CMT wrapper handlers. CMTFILENO: DS virtual 1 ; Sequential file access file number. Used when no filename is given, uses the directory entry number for the set wildcard, DS virtual (TZVARMEM + TZVARSIZE) - $ ; Top of variable area downwards is used as the working stack, SA1510 space isnt used. TZSTACK: EQU TZVARMEM + TZVARSIZE ; Variables and control structure used by the I/O processor for service calls and requests. ORG TZSVCMEM TZSVCMEM: EQU 0ED80H ; Start of a memory structure used to communicate with the K64F I/O processor for services such as disk access. TZSVCSIZE: EQU 00280H ; TZSVCDIRSZ: EQU 20 ; Size of the directory/file name. TZSVCFILESZ: EQU 17 ; Size of a Sharp filename. TZSVCLONGFILESZ: EQU 31 ; Size of a standard filename. TZSVCLONGFMTSZ: EQU 20 ; Size of a formatted standard filename for use in directory listings. TZSVCWILDSZ: EQU 20 ; Size of the wildcard. TZSVCSECSIZE: EQU 512 TZSVCDIR_ENTSZ: EQU 32 ; Size of a directory entry. TZSVCWAITIORETRIES: EQU 5 ; Wait retries for IO response. TZSVCWAITCOUNT: EQU 65535 ; Wait retries for IO request response. TZSVC_FTYPE_MZF: EQU 0 ; File type being handled is an MZF TZSVC_FTYPE_MZFHDR: EQU 1 ; File type being handled is an MZF Header. TZSVC_FTYPE_CAS: EQU 2 ; File type being handled is an CASsette BASIC script. TZSVC_FTYPE_BAS: EQU 3 ; File type being handled is an BASic script TZSVC_FTYPE_ALL: EQU 10 ; Handle any filetype. TZSVC_FTYPE_ALLFMT: EQU 11 ; Special case for directory listings, all files but truncated and formatted. TZSVCCMD: DS virtual 1 ; Service command. TZSVCRESULT: DS virtual 1 ; Service command result. TZSVCDIRSEC: DS virtual 1 ; Storage for the directory sector number. TZSVC_FILE_SEC: EQU TZSVCDIRSEC ; Union of the file and directory sector as only one can be used at a time. TZSVC_TRACK_NO: DS virtual 2 ; Storage for the virtual drive track number. TZSVC_SECTOR_NO: DS virtual 2 ; Storage for the virtual drive sector number. TZSVC_SECTOR_LBA: EQU TZSVC_TRACK_NO ; Sector in 32bit LBA format. TZSVC_MEM_TARGET: EQU TZSVC_TRACK_NO ; Memory command should target, 0 = tranZPUter, 1 = mainboard. TZSVC_FILE_NO: DS virtual 1 ; File number to be opened in a file service command. TZSVC_FILE_TYPE: DS virtual 1 ; Type of file being accessed to differentiate between Sharp MZF files and other handled files. TZSVC_LOADADDR: DS virtual 2 ; Dynamic load address for rom/images. TZSVC_SAVEADDR: EQU TZSVC_LOADADDR ; Union of the load address and the cpu frequency change value, the address of data to be saved. TZSVC_CPU_FREQ: EQU TZSVC_LOADADDR ; Union of the load address and the save address value, only one can be used at a time. TZSVC_LOADSIZE: DS virtual 2 ; Size of image to load. TZSVC_SAVESIZE: EQU TZSVC_LOADSIZE ; Size of image to be saved. TZSVC_DIRNAME: DS virtual TZSVCDIRSZ ; Service directory/file name. TZSVC_FILENAME: DS virtual TZSVCFILESZ ; Filename to be opened/created. TZSVCWILDC: DS virtual TZSVCWILDSZ ; Directory wildcard for file pattern matching. TZSVCSECTOR: DS virtual TZSVCSECSIZE ; Service command sector - to store directory entries, file sector read or writes. TZSVC_CMD_READDIR EQU 01H ; Service command to open a directory and return the first block of entries. TZSVC_CMD_NEXTDIR EQU 02H ; Service command to return the next block of an open directory. TZSVC_CMD_READFILE EQU 03H ; Service command to open a file and return the first block. TZSVC_CMD_NEXTREADFILE EQU 04H ; Service command to return the next block of an open file. TZSVC_CMD_WRITEFILE EQU 05H ; Service command to create a file and save the first block. TZSVC_CMD_NEXTWRITEFILE EQU 06H ; Service command to write the next block to the open file. TZSVC_CMD_CLOSE EQU 07H ; Service command to close any open file or directory. TZSVC_CMD_LOADFILE EQU 08H ; Service command to load a file directly into tranZPUter memory. TZSVC_CMD_SAVEFILE EQU 09H ; Service command to save a file directly from tranZPUter memory. TZSVC_CMD_ERASEFILE EQU 0aH ; Service command to erase a file on the SD card. TZSVC_CMD_CHANGEDIR EQU 0bH ; Service command to change the active directory on the SD card. TZSVC_CMD_LOAD40ABIOS EQU 20H ; Service command requesting that the 40 column version of the SA1510 BIOS is loaded. TZSVC_CMD_LOAD80ABIOS EQU 21H ; Service command requesting that the 80 column version of the SA1510 BIOS is loaded. TZSVC_CMD_LOAD700BIOS40 EQU 22H ; Service command requesting that the MZ700 1Z-013A 40 column BIOS is loaded. TZSVC_CMD_LOAD700BIOS80 EQU 23H ; Service command requesting that the MZ700 1Z-013A 80 column patched BIOS is loaded. TZSVC_CMD_LOAD80BIPL EQU 24H ; Service command requesting the MZ-80B IPL is loaded. TZSVC_CMD_LOADBDOS EQU 30H ; Service command to reload CPM BDOS+CCP. TZSVC_CMD_ADDSDDRIVE EQU 31H ; Service command to attach a CPM disk to a drive number. TZSVC_CMD_READSDDRIVE EQU 32H ; Service command to read an attached SD file as a CPM disk drive. TZSVC_CMD_WRITESDDRIVE EQU 33H ; Service command to write to a CPM disk drive which is an attached SD file. TZSVC_CMD_CPU_BASEFREQ EQU 40H ; Service command to switch to the mainboard frequency. TZSVC_CMD_CPU_ALTFREQ EQU 41H ; Service command to switch to the alternate frequency provided by the K64F. TZSVC_CMD_CPU_CHGFREQ EQU 42H ; Service command to set the alternate frequency in hertz. TZSVC_CMD_CPU_SETZ80 EQU 50H ; Service command to switch to the external Z80 hard cpu. TZSVC_CMD_CPU_SETT80 EQU 51H ; Service command to switch to the internal T80 soft cpu. TZSVC_CMD_CPU_SETZPUEVO EQU 52H ; Service command to switch to the internal ZPU Evolution soft cpu. TZSVC_CMD_EXIT EQU 07FH ; Service command to terminate TZFS and restart the machine in original mode. TZSVC_STATUS_OK EQU 000H ; Flag to indicate the K64F processing completed successfully. TZSVC_STATUS_REQUEST EQU 0FEH ; Flag to indicate the Z80 has made a request to the K64F. TZSVC_STATUS_PROCESSING EQU 0FFH ; Flag to indicate the K64F is processing a command. ; Quickdisk work area ;QDPA EQU 01130h ; QD code 1 ;QDPB EQU 01131h ; QD code 2 ;QDPC EQU 01132h ; QD header startaddress ;QDPE EQU 01134h ; QD header length ;QDCPA EQU 0113Bh ; QD error flag ;HDPT EQU 0113Ch ; QD new headpoint possition ;HDPT0 EQU 0113Dh ; QD actual headpoint possition ;FNUPS EQU 0113Eh ;FNUPF EQU 01140h ;FNA EQU 01141h ; File Number A (actual file number) ;FNB EQU 01142h ; File Number B (next file number) ;MTF EQU 01143h ; QD motor flag ;RTYF EQU 01144h ;SYNCF EQU 01146h ; SyncFlags ;RETSP EQU 01147h ;BUFER EQU 011A3h ;QDIRBF EQU 0CD90h ;SPV: ;IBUFE: ; TAPE BUFFER (128 BYTES) ;ATRB: DS virtual 1 ; Code Type, 01 = Machine Code. ;NAME: DS virtual 17 ; Title/Name (17 bytes). ;SIZE: DS virtual 2 ; Size of program. ;DTADR: DS virtual 2 ; Load address of program. ;EXADR: DS virtual 2 ; Exec address of program. ;COMNT: DS virtual 104 ; COMMENT ;KANAF: DS virtual 1 ; KANA FLAG (01=GRAPHIC MODE) ;DSPXY: DS virtual 2 ; DISPLAY COORDINATES ;MANG: DS virtual 27 ; COLUMN MANAGEMENT ;FLASH: DS virtual 1 ; FLASHING DATA ;FLPST: DS virtual 2 ; FLASHING POSITION ;FLSST: DS virtual 1 ; FLASHING STATUS ;FLSDT: DS virtual 1 ; CURSOR DATA ;STRGF: DS virtual 1 ; STRING FLAG ;DPRNT: DS virtual 1 ; TAB COUNTER ;TMCNT: DS virtual 2 ; TAPE MARK COUNTER ;SUMDT: DS virtual 2 ; CHECK SUM DATA ;CSMDT: DS virtual 2 ; FOR COMPARE SUM DATA ;AMPM: DS virtual 1 ; AMPM DATA ;TIMFG: DS virtual 1 ; TIME FLAG ;SWRK: DS virtual 1 ; KEY SOUND FLAG ;TEMPW: DS virtual 1 ; TEMPO WORK ;ONTYO: DS virtual 1 ; ONTYO WORK ;OCTV: DS virtual 1 ; OCTAVE WORK ;RATIO: DS virtual 2 ; ONPU RATIO