Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added new MOS 1.04 API calls #3

Merged
merged 2 commits into from
Feb 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion include/mos_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* Title: AGON MOS - MOS c header interface
* Author: Jeroen Venema
* Created: 15/10/2022
* Last Updated: 22/07/2023
* Last Updated: 18/11/2023
*
* Modinfo:
* 15/10/2022: Added putch, getch
Expand All @@ -13,6 +13,7 @@
* 19/04/2023: Added mos_getfil
* 02/07/2023: Added struct / union for RTC_DATA
* 22/07/2023: Added structure for SYSVAR
* 18/11/2023: Added mos_setkbvector, mos_getkbmap, mos_i2c_open, mos_i2c_close, mos_i2c_write, mos_i2c_read
*/

#ifndef _MOS_H
Expand All @@ -30,6 +31,17 @@ typedef uint8_t BYTE;
#define FA_OPEN_ALWAYS 0x10
#define FA_OPEN_APPEND 0x30

// I2C frequency
#define I2C_SPEED_57600 0x01
#define I2C_SPEED_115200 0x02
#define I2C_SPEED_230400 0x03
// I2C return codes to caller
#define RET_OK 0x00
#define RET_NORESPONSE 0x01
#define RET_DATA_NACK 0x02
#define RET_ARB_LOST 0x04
#define RET_BUS_ERROR 0x08

/* FatFS File function return code (FRESULT) */

typedef enum {
Expand Down Expand Up @@ -233,4 +245,11 @@ extern uint24_t mos_fread(uint8_t fh, char *buffer, uint24_t numbytes);
extern uint24_t mos_fwrite(uint8_t fh, char *buffer, uint24_t numbytes);
extern uint8_t mos_flseek(uint8_t fh, uint32_t offset);
extern FIL* mos_getfil(uint8_t fh);
extern void mos_setkbvector(void(*handler)(void), uint8_t addresslength); // length 0:24bit, 1:16bit
extern uint8_t* mos_getkbmap(void); // returns address of the keyboard map
extern void mos_i2c_open(uint8_t frequency);
extern void mos_i2c_close(void);
extern uint8_t mos_i2c_write(uint8_t i2c_address, uint8_t size, unsigned char * buffer);
extern uint8_t mos_i2c_read(uint8_t i2c_address, uint8_t size, unsigned char * buffer);

#endif
9 changes: 8 additions & 1 deletion lib/libc/mos_api.inc
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
; Title: AGON MOS - API for user projects
; Author: Dean Belfield
; Created: 03/08/2022
; Last Updated: 15/04/2023
; Last Updated: 18/11/2023
; Adjusted for fasmg assembler (Paul Cawte, 16/06/2023)
;
; Modinfo:
Expand All @@ -21,6 +21,7 @@
; 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
; 18/11/2023: Added _mos_setkbvector, _mos_getkbmap, _mos_i2c_open, _mos_i2c_close, _mos_i2c_write, _mos_i2c_read

; VDP control (VDU 23, 0, n)
;
Expand Down Expand Up @@ -67,6 +68,12 @@ mos_getfil := 019h
mos_fread := 01Ah
mos_fwrite := 01Bh
mos_flseek := 01Ch
mos_setkbvector := 01Dh
mos_getkbmap := 01Eh
mos_i2c_open := 01Fh
mos_i2c_close := 020h
mos_i2c_write := 021h
mos_i2c_read := 022h

; FatFS file access functions
;
Expand Down
76 changes: 75 additions & 1 deletion lib/libc/mos_api.src
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
; Title: AGON MOS - MOS assembly interface
; Author: Jeroen Venema updated by Paul Cawte for use with AgDev Toolchain
; Created: 15/10/2022
; Last Updated: 02/07/2023
; Last Updated: 18/11/2023
;
; Modinfo:
; 02/07/2023 Added getsysvar_time
Expand All @@ -22,6 +22,7 @@
; 16/04/2023: Added _mos_fread, _mos_fwrite and _mos_flseek
; 18/04/2023: _mos_flseek fix
; 19/04/2023: _mos_getfil added
; 18/11/2023: _mos_setkbvector, _mos_getkbmap, _mos_i2c_open, _mos_i2c_close, _mos_i2c_write, _mos_i2c_read added

assume adl =1

Expand Down Expand Up @@ -61,6 +62,12 @@
public _mos_fwrite
public _mos_flseek
public _mos_getfil
public _mos_setkbvector
public _mos_getkbmap
public _mos_i2c_write
public _mos_i2c_read
public _mos_i2c_close
public _mos_i2c_open

public _getsysvar_time
public _getsysvar_vpd_pflags
Expand Down Expand Up @@ -651,3 +658,70 @@ _mos_getfil:
ld sp, ix
pop ix
ret

_mos_setkbvector:
push ix
ld ix,0
add ix, sp
ld hl, (ix+6)
ld c, (ix+9)
ld a, mos_setkbvector
rst.lil 08h
ld sp,ix
pop ix
ret

_mos_getkbmap:
push ix
ld a, mos_getkbmap
rst.lil 08h
push ix
pop hl
pop ix
ret

_mos_i2c_open:
push ix
ld ix,0
add ix, sp
ld c, (ix+6)
ld a, mos_i2c_open
rst.lil 08h
ld sp,ix
pop ix
ret

_mos_i2c_close:
push ix
ld ix,0
add ix, sp
ld a, mos_i2c_close
rst.lil 08h
ld sp,ix
pop ix
ret
_mos_i2c_write:
push ix
ld ix,0
add ix, sp
ld c, (ix+6)
ld b, (ix+9)
ld hl, (ix+12)
ld a, mos_i2c_write
rst.lil 08h
ld sp,ix
pop ix
ret

_mos_i2c_read:
push ix
ld ix,0
add ix, sp
ld c, (ix+6)
ld b, (ix+9)
ld hl, (ix+12)
ld a, mos_i2c_read
rst.lil 08h
ld sp,ix
pop ix
ret