;
; 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