-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmemmap.z80
145 lines (125 loc) · 3.01 KB
/
memmap.z80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
ROMBASE: equ 0x0000
RAMBASE: equ 0x2000
SYSSTACK: equ 0x7FFF
; Below we use defs to define variables in RAM, starting at RAMBASE
; This will actually output binary content, so when we're done we
; use "seek 0" to overwrite it with actual code. Even though our
; empty space is overwritten, the labels remain valid in the
; assembler, so can be used elsewhere. This is a bit hacky and
; assembler-dependent, but it permits a MUCH nicer layout for this
; file than trying to use only "equ"!
org RAMBASE
int_vector: defs 16
; BIOS variables
START_BIOS_RAM:
mem_bank: defs 1
END_BIOS_RAM:
; Stuff for the monitor
START_MON_RAM:
mon_linebuf: defs 80
mon_argc: defs 1
mon_argv: defs 2
defs 40
mon_stack: defs 2
mon_stack_backup: defs 2
END_MON_RAM:
; Stuff for the inbuilt DOS
START_DOS_RAM:
;; Interrupt stuff
ticks: defs 1
sleep_tick: defs 1
sleep_countdown: defs 1
microsleep_countdown: defs 1
uptime: defs 8
uart_pause: defs 1
uart_buffering: defs 1
uart_buffer: defs 16
uart_buffer_pointer: defs 2
uart_buffer_size: defs 1
;; Sys variables
SYSPAGE:
execaddr: defs 2
fileaddr: defs 2
sysstack: defs 2
prgstack: defs 2
; Batch stuff
line_start: defs 2
line_end: defs 2
; Ls vars
file_count: defs 2
total_size: defs 4
ctrl_c_handler: defs 2
;; Command line stuff
dos_linebuf: defs 80
dos_argc: defs 1
dos_argv: defs 32
dos_stack_backup: defs 2
dos_resume_stack_ptr: defs 2
message_buffer: defs 80
; Bin2Dec
B2DINV: DS 8 ; space for 64-bit input value (LSB first)
B2DBUF: DS 20 ; space for 20 decimal digits
B2DEND: DS 1 ; space for terminating 0
; Stuff for the FAT driver
START_FAT_RAM:
fat_sector_buffer: defs 512
fat_buffer_index: defs 2
; FAT specs table ;;;;;;;;;;;
partition_start_sec: defs 4
fat_spec_table:
bytes_per_sector: defs 2
sectors_per_cluster: defs 1
reserved_sectors: defs 2
no_of_fats: defs 1
no_of_root_dir_ents: defs 2
small_total_sectors: defs 2
media_descriptor: defs 1
sectors_per_fat: defs 2
; Derived FAT specs ;;;;;;;;;;;
start_of_fat: defs 2
start_of_root_dir: defs 2
start_of_data: defs 2
fat_buffer: defs 512
fat_sector: defs 2
fat_cluster: defs 2
fat_index: defs 1
fat_mem_index: defs 2
root_dir_buffer: defs 512
root_dir_sector: defs 2
root_dir_index: defs 1
root_dir_mem_index: defs 2
; Directory entry ;;;;;;;;;;;;
dir_entry_buffer:
filename: defs 8
extension: defs 3
attribs: defs 1
more_attribs: defs 1
creation_millis: defs 1
creation_h_m_s: defs 2
creation_date: defs 2
last_access_date: defs 2
yet_more_attribs: defs 2
last_write_time: defs 2
last_write_date: defs 2
starting_cluster: defs 2
size_in_bytes: defs 4
; File loading stuff ;;;;;;;;;;;;;;
fat_dirty: defs 1
current_cluster: defs 2
memory_pointer: defs 2
bytes_remaining: defs 2
bytes_read: defs 2
total_bytes: defs 2
new_file_start_clu: defs 2
filename_buffer: defs 16
all_done: defs 1
read_cluster: defs 2
write_cluster: defs 2
; Scratch stuff ;;;;;;;;;;;;;;
target_filename_ptr: defs 2
need_to_add_dir_end: defs 1
END_FAT_RAM:
END_DOS_RAM:
END_RAM:
; Rewind!
seek 0