aboutsummaryrefslogtreecommitdiffstats
path: root/mos_api.inc
blob: cf645b0ab095e50c769abc0f6ea7b0cef94c8467 (plain) (blame)
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
;
; Title:	AGON MOS - API for user projects
; Author:	Dean Belfield
; Created:	03/08/2022
; Last Updated:	11/11/2023
;
; Modinfo:
; 05/08/2022:	Added mos_feof
; 09/08/2022:	Added system variables: cursorX, cursorY
; 18/08/2022:	Added system variables: scrchar, scrpixel, audioChannel, audioSuccess, vpd_pflags
; 05/09/2022:	Added mos_ren, vdp_pflag_mode
; 24/09/2022:	Added mos_getError, mos_mkdir
; 13/10/2022:	Added mos_oscli
; 23/02/2023:	Added more sysvars, fixed typo in sysvar_audioSuccess, offsets for sysvar_scrCols, sysvar_scrRows
; 04/03/2023:	Added sysvar_scrpixelIndex
; 08/03/2023:	Renamed sysvar_keycode to sysvar_keyascii, added sysvar_vkeycode
; 15/03/2023:	Added mos_copy, mos_getrtc, mos_setrtc, rtc, vdp_pflag_rtc
; 21/03/2023:	Added mos_setintvector, sysvars for keyboard status, vdu codes for vdp
; 22/03/2023:	The VDP commands are now indexed from 0x80
; 29/03/2023:	Added mos_uopen, mos_uclose, mos_ugetc, mos_uputc
; 13/04/2023:	Added FatFS file structures (FFOBJID, FIL, DIR, FILINFO)
; 15/04/2023:	Added mos_getfil, mos_fread, mos_fwrite and mos_flseek
; 19/05/2023:	Added sysvar_scrMode
; 05/06/2023:	Added sysvar_rtcEnable
; 03/08/2023:	Added mos_setkbvector
; 10/08/2023:	Added mos_getkbmap
; 11/11/2023:	Added mos_i2c_open, mos_i2c_close, mos_i2c_write and mos_i2c_read

; VDP control (VDU 23, 0, n)
;
vdp_gp:			equ 	80h
vdp_keycode:		equ 	81h
vdp_cursor:		equ	82h
vdp_scrchar:		equ	83h
vdp_scrpixel:		equ	84h
vdp_audio:		equ	85h
vdp_mode:		equ	86h
vdp_rtc:		equ	87h
vdp_keystate:		equ	88h
vdp_logicalcoords:	equ	C0h
vdp_terminalmode:	equ	FFh

; MOS high level functions
;
mos_getkey:		equ	00h
mos_load:		equ	01h
mos_save:		equ	02h
mos_cd:			equ	03h
mos_dir:		equ	04h
mos_del:		equ	05h
mos_ren:		equ	06h
mos_mkdir:		equ	07h
mos_sysvars:		equ	08h
mos_editline:		equ	09h
mos_fopen:		equ	0Ah
mos_fclose:		equ	0Bh
mos_fgetc:		equ	0Ch
mos_fputc:		equ	0Dh
mos_feof:		equ	0Eh
mos_getError:		equ	0Fh
mos_oscli:		equ	10h
mos_copy:		equ	11h
mos_getrtc:		equ	12h
mos_setrtc:		equ	13h
mos_setintvector:	equ	14h
mos_uopen:		equ	15h
mos_uclose:		equ	16h
mos_ugetc:		equ	17h
mos_uputc:		equ 	18h
mos_getfil:		equ	19h
mos_fread:		equ	1Ah
mos_fwrite:		equ	1Bh
mos_flseek:		equ	1Ch
mos_setkbvector:	equ	1Dh
mos_getkbmap:		equ	1Eh
mos_i2c_open:		equ	1Fh
mos_i2c_close:		equ	20h
mos_i2c_write:		equ	21h
mos_i2c_read:		equ	22h


; FatFS file access functions
;
ffs_fopen:		equ	80h
ffs_fclose:		equ	81h
ffs_fread:		equ	82h
ffs_fwrite:		equ	83h
ffs_flseek:		equ	84h
ffs_ftruncate:		equ	85h
ffs_fsync:		equ	86h
ffs_fforward:		equ	87h
ffs_fexpand:		equ	88h
ffs_fgets:		equ	89h
ffs_fputc:		equ	8Ah
ffs_fputs:		equ	8Bh
ffs_fprintf:		equ	8Ch
ffs_ftell:		equ	8Dh
ffs_feof:		equ	8Eh
ffs_fsize:		equ	8Fh
ffs_ferror:		equ	90h

; FatFS directory access functions
;
ffs_dopen:		equ	91h
ffs_dclose:		equ	92h
ffs_dread:		equ	93h
ffs_dfindfirst:		equ	94h
ffs_dfindnext:		equ	95h

; FatFS file and directory management functions
;
ffs_stat:		equ	96h
ffs_unlink:		equ	97h
ffs_rename:		equ	98h
ffs_chmod:		equ	99h
ffs_utime:		equ	9Ah
ffs_mkdir:		equ	9Bh
ffs_chdir:		equ	9Ch
ffs_chdrive:		equ	9Dh
ffs_getcwd:		equ	9Eh

; FatFS volume management and system configuration functions
;
ffs_mount:		equ	9Fh
ffs_mkfs:		equ	A0h
ffs_fdisk:		equ	A1h
ffs_getfree:		equ	A2h
ffs_getlabel:		equ	A3h
ffs_setlabel:		equ	A4h
ffs_setcp:		equ	A5h
	
; File access modes
;
fa_read:		equ	01h
fa_write:		equ	02h
fa_open_existing:	equ	00h
fa_create_new:		equ	04h
fa_create_always:	equ	08h
fa_open_always:		equ	10h
fa_open_append:		equ	30h
	
; System variable indexes for api_sysvars
; Index into _sysvars in globals.asm
;
sysvar_time:		equ	00h	; 4: Clock timer in centiseconds (incremented by 2 every VBLANK)
sysvar_vpd_pflags:	equ	04h	; 1: Flags to indicate completion of VDP commands
sysvar_keyascii:	equ	05h	; 1: ASCII keycode, or 0 if no key is pressed
sysvar_keymods:		equ	06h	; 1: Keycode modifiers
sysvar_cursorX:		equ	07h	; 1: Cursor X position
sysvar_cursorY:		equ	08h	; 1: Cursor Y position
sysvar_scrchar:		equ	09h	; 1: Character read from screen
sysvar_scrpixel:	equ	0Ah	; 3: Pixel data read from screen (R,B,G)
sysvar_audioChannel:	equ	0Dh	; 1: Audio channel 
sysvar_audioSuccess:	equ	0Eh	; 1: Audio channel note queued (0 = no, 1 = yes)
sysvar_scrWidth:	equ	0Fh	; 2: Screen width in pixels
sysvar_scrHeight:	equ	11h	; 2: Screen height in pixels
sysvar_scrCols:		equ	13h	; 1: Screen columns in characters
sysvar_scrRows:		equ	14h	; 1: Screen rows in characters
sysvar_scrColours:	equ	15h	; 1: Number of colours displayed
sysvar_scrpixelIndex:	equ	16h	; 1: Index of pixel data read from screen
sysvar_vkeycode:	equ	17h	; 1: Virtual key code from FabGL
sysvar_vkeydown:	equ	18h	; 1: Virtual key state from FabGL (0=up, 1=down)
sysvar_vkeycount:	equ	19h	; 1: Incremented every time a key packet is received
sysvar_rtc:		equ	1Ah	; 6: Real time clock data
sysvar_spare:		equ	20h	; 2: Spare, previously used by rtc
sysvar_keydelay:	equ	22h	; 2: Keyboard repeat delay
sysvar_keyrate:		equ	24h	; 2: Keyboard repeat reat
sysvar_keyled:		equ	26h	; 1: Keyboard LED status
sysvar_scrMode:		equ	27h	; 1: Screen mode
sysvar_rtcEnable:	equ	28h	; 1: RTC enable flag (0: disabled, 1: use ESP32 RTC)
sysvar_mouseX:		equ	29h	; 2: Mouse X position
sysvar_mouseY:		equ	2Bh	; 2: Mouse Y position
sysvar_mouseButtons:	equ	2Dh	; 1: Mouse button state
sysvar_mouseWheel:	equ	2Eh	; 1: Mouse wheel delta
sysvar_mouseXDelta:	equ	2Fh	; 2: Mouse X delta
sysvar_mouseYDelta:	equ	31h	; 2: Mouse Y delta
	
; Flags for the VPD protocol
;
vdp_pflag_cursor:	equ	00000001b
vdp_pflag_scrchar:	equ	00000010b
vdp_pflag_point:	equ	00000100b
vdp_pflag_audio:	equ	00001000b
vdp_pflag_mode:		equ	00010000b
vdp_pflag_rtc:		equ	00100000b
vdp_pflag_mouse:	equ	01000000b
; vdp_pflag_buffered:	equ	10000000b

;
; Macro for calling the API
; Parameters:
; - function: One of the function numbers listed above
;
    macro mos function
    ld a,function
    rst.lis $08
    endmacro