Files
2023-03-13 08:36:51 +00:00

444 lines
12 KiB
NASM

;################################################################################
;# #
;# AVR-ChipBasic2 - single chip basic computer with ATmega644 #
;# binfile API #
;# copyright (c) 2006-2015 Joerg Wolfram (joerg@jcwolfram.de) #
;# #
;# This program 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 library 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 #
;# Lesser General Public License for more details. #
;# #
;# You should have received a copy of the GNU Lesser General Public #
;# License along with this library; if not, write to the #
;# Free Software Foundation, Inc., 59 Temple Place - Suite 330, #
;# Boston, MA 02111-1307, USA. #
;# #
;################################################################################
;--------------------------------------------------------------------------------
;get access to compress and decompress routines
;--------------------------------------------------------------------------------
clin_ext:
api_token: jmp clin_main
xlin_ext:
api_untoken: jmp xlin_main
;--------------------------------------------------------------------------------
;API version
;--------------------------------------------------------------------------------
api_version: ldi tempreg1,0x06
ret
;--------------------------------------------------------------------------------
;push/pop functions
;--------------------------------------------------------------------------------
api_popxyz: rjmp popxyz
api_pushxyz: rjmp pushxyz
api_popregs: rjmp popxyzr
api_pushregs: rjmp pushxyzr
;--------------------------------------------------------------------------------
;pointer functions
;--------------------------------------------------------------------------------
;get vram address to Y
api_getvram: ldi YL,LOW(libmio_vram)
ldi YH,HIGH(libmio_vram)
ret
;get sysram address to Y
api_getsysram: ldi YL,LOW(libmio_ram)
ldi YH,HIGH(libmio_ram)
ret
;get palette address to Y
api_getpal: ldi YL,LOW(libmio_palette)
ldi YH,HIGH(libmio_palette)
ret
;get array address to Y
api_getarray: ldi YL,LOW(bas_array)
ldi YH,HIGH(bas_array)
ret
;get charset 0 address to Z
api_getchart0: ldi ZL,LOW(libmio_ctable*2)
ldi ZH,HIGH(libmio_ctable*2)
ret
;get charset 1 address to Z
api_getchart1: ldi ZL,LOW(libmio_ctable*2)
ldi ZH,HIGH(libmio_ctable*2)
ret
;get address of basic buffers
api_getbuffer: ldi YL,LOW(bas_inbuf)
ldi YH,HIGH(bas_inbuf)
ret
;get values address to Y
api_getvalues: ldi YL,LOW(bas_values)
ldi YH,HIGH(bas_values)
ret
;get parameter address to Y
api_getpartab: ldi YL,LOW(bas_partab)
ldi YH,HIGH(bas_partab)
ret
;get variable address to Y
api_getvar: ldi YL,LOW(varspace)
ldi YH,HIGH(varspace)
ret
;get
api_getprg: ldi YL,LOW(prg_funct)
ldi YH,HIGH(prg_funct)
ret
;get program base address to Z
api_getbase_0: pop ZH ;get return address high byte
push ZH
mov ZL,ZH
subi ZL,0x48 ;sub base
ldi ZH,0x42 ;base
api_getbase_1: subi ZH,0xfa ;+6
subi ZL,0x06
brcc api_getbase_1
clr ZL
brtc api_getbase_2
add ZL,XL
adc ZH,XH
lsl ZL
rol ZH
api_getbase_2: ret
;get program address (offset X) to Z
api_dataptr: set
rjmp api_getbase_0
api_getbase: clt
rjmp api_getbase_0
;get program number (0..7) to ZL
api_getprog: pop ZH ;get return address high byte
push ZH
ldi ZL,0
subi ZH,0x48 ;sub base
api_getprog_1: subi ZH,0x06
brcs api_getprog_2
inc ZL
rjmp api_getprog_1
api_getprog_2: ret
;--------------------------------------------------------------------------------
;settings XL=value
;--------------------------------------------------------------------------------
api_setcolor: jmp libmio_setcol
api_setfcolor: jmp libmio_setfgc
api_setborder: jmp libmio_setbrd
api_setvmode: jmp libmio_svmode
api_setpalette: jmp libmio_setpal
api_sync: jmp libmio_sync
api_slow: jmp libmio_vidon
api_fast: jmp libmio_vidoff
api_setchannel: jmp libmio_setchan
api_setfont: jmp libmio_setfont
;--------------------------------------------------------------------------------
;text functions r20=value
;--------------------------------------------------------------------------------
api_clrscr: jmp libmio_clr
api_outchar: jmp libmio_char
api_outdez: jmp libmio_outd
api_outhex: jmp libmio_outh
api_gotoxy: jmp libmio_gxy
api_romtext: jmp libmio_orom
api_thistext: jmp libmio_othis
api_cbox: clt
jmp libmio_cbox
api_ibox: set
jmp libmio_cbox
api_scroll: jmp libmio_scrl
api_newline: jmp libmio_newline
api_sprite: jmp libmio_spritex
api_cursor: call libmio_gxy
jmp libmio_cursor
;--------------------------------------------------------------------------------
;keyboard functions r20=value
;--------------------------------------------------------------------------------
api_waitkey: jmp libmio_waitkey
api_nokey: jmp libmio_nokey
api_kstate: lds tempreg1,libmio_kbdstate
andi tempreg1,0x1f
ret
api_kflags: lds tempreg1,libmio_kflags
ret
api_getkey: lds tempreg1,libmio_keycode
ret
api_lastkey: lds tempreg1,libmio_lastkey
ret
api_scancode: lds tempreg1,libmio_scancode
ret
;-------------------------------------------------------------------------------
; comm functions
;-------------------------------------------------------------------------------
api_putser: jmp libmio_pser
api_getser: jmp libmio_gser
api_getserb: jmp libmio_gserb
api_putser2: jmp libmio_pser2
api_getser2: jmp libmio_gser2
api_getserb2: jmp libmio_gserb2
api_putpar: jmp libmio_ppar
api_putxm: jmp libmio_txbl
api_getxm: jmp libmio_rxbl
api_putsernl: jmp libmio_sernl
api_putsernl2: jmp libmio_sernl2
api_baud2: jmp libmio_baud2
api_hexline: jmp libmio_scrs_li
;-------------------------------------------------------------------------------
; graphic functions
;-------------------------------------------------------------------------------
api_plot: jmp libmio_plot
api_draw: jmp libmio_draw
api_box: jmp libmio_box
api_fbox: jmp libmio_fbox
api_circle: call bas_g4c_1
jmp libmio_circle
api_fcircle: call bas_g4c_1
jmp libmio_fcircle
api_bcopy1: jmp libmio_bc1
api_bcopy2: jmp libmio_bc2
api_bcopy3: jmp libmio_bc3
;-------------------------------------------------------------------------------
; UI
;-------------------------------------------------------------------------------
api_menu: jmp libmio_menu
api_drawmenu: jmp libmio_domenu
api_alert: jmp libmio_abox1
api_ask: jmp libmio_ynbox1
api_alertthis: jmp libmio_abox
api_askthis: jmp libmio_ynbox
api_alert_nb: jmp libmio_aboxn1
api_ask_nb: jmp libmio_ynboxn1
api_alertthis_nb: jmp libmio_aboxn
api_askthis_nb: jmp libmio_ynboxn
api_wbox: jmp libmio_wbox
api_whbox: jmp libmio_whbox
api_saywrite: jmp fsys_wal
api_saytransfer: jmp fsys_tal
;-------------------------------------------------------------------------------
; sound
;-------------------------------------------------------------------------------
api_note: jmp libmio_note
api_setvolume: jmp libmio_setvol
api_startseq: jmp libmio_startsq
api_setseq: jmp libmio_setseq
api_getseq: jmp libmio_getseq
;-------------------------------------------------------------------------------
; I2C
;-------------------------------------------------------------------------------
api_i2c_read: jmp libi2c_read
api_i2c_write: jmp libi2c_write
api_i2c_start: jmp libi2c_start
api_i2c_stop: jmp libi2c_stop
api_i2c_rbyte: jmp libi2c_rbyte
api_i2c_rbyten: jmp libi2c_rbyten
api_i2c_wbyte: jmp libi2c_wbyte
api_i2c_rlm75: jmp libi2c_rlm75
;-------------------------------------------------------------------------------
; EEPROM
;-------------------------------------------------------------------------------
api_eep_read: jmp libeep_read
api_eep_write: jmp libeep_write
;-------------------------------------------------------------------------------
; Math
;-------------------------------------------------------------------------------
api_abs: jmp expar_absa
api_add: jmp expar_add
api_sub: jmp expar_sub
api_mul: jmp expar_mul
api_div: jmp expar_div
api_sin: jmp expar_sin
api_cos: jmp expar_cos
api_eq: jmp expar_eq
api_lt: jmp expar_gt
api_gt: jmp expar_lt
api_sqr: jmp expar_sqr_u
api_rnd: jmp expar_rnd
api_adc: jmp expar_adc
api_dbit: jmp expar_dbit
;-------------------------------------------------------------------------------
; Dataflash
;-------------------------------------------------------------------------------
api_fs_create: call libdfl_rput
jmp fsys_create
api_fs_delete: call libdfl_rput
jmp fsys_delete
api_fs_read: call libdfl_rput
jmp fsys_read
api_fs_write: call libdfl_rput
jmp fsys_write
api_fs_cfree: jmp libdfl_cfree
api_fs_size: jmp libdfl_size
api_fs_checkf: jmp libdfl_cif
api_fs_gettype: call libdfl_gheada
jmp libdfl_gtype
api_fs_rread: clr ereg
jmp fsys_readraw
api_fs_rwrite: clr ereg
jmp fsys_writeraw
api_fs_fsize: jmp expar_fsize
api_fs_ffind: jmp expar_ffind
api_fs_fsel: jmp fsys_fileselect
api_fs_fsel_nb: jmp fsys_fileselect2
api_fs_check: jmp fsys_check
;-------------------------------------------------------------------------------
; misc
;-------------------------------------------------------------------------------
api_copychar4: jmp libmio_cpbits4
api_copychar6: jmp libmio_cpbits6
api_basrun: jmp basrun
api_exparser: jmp expar
api_tparser: jmp tparser
api_lfind: jmp lfind
api_lcall: jmp lcall
api_preceive: jmp recv_prog_a
api_psend: jmp send_prog_a
api_wpage: jmp mem_writepage
api_arrview: jmp mon_varr
api_extsearch: jmp sys_extsearch
api_extdisable: jmp sys_extdisable
;-------------------------------------------------------------------------------
; extension
;-------------------------------------------------------------------------------
api_basgetpar: jmp bas_getpar
api_basgetvar: jmp bas_getvar
;-------------------------------------------------------------------------------
; VM0 jumps
;-------------------------------------------------------------------------------
api_vm0line: pop r0
pop r0
jmp libmio_tvc_0
api_vm0cls: rcall pushxyz
jmp libmio_fill
api_vm0char: push XL
push XH
jmp libmio_char_ap
api_vm0gotoxy: jmp libmio_gxy_ap
api_vm0plot: jmp libmio_iplot
api_vm0newline: push XL
push XH
jmp libmio_nlap
;-------------------------------------------------------------------------------
; screen save/restore
;-------------------------------------------------------------------------------
api_sbackup: jmp mon_backup
api_srestore: jmp mon_restore
api_screenshot: jmp libmio_scrs
;-------------------------------------------------------------------------------
; array functions
;-------------------------------------------------------------------------------
api_aread: jmp arr_read1
api_awrite: jmp arr_write1
api_pageset: sts xram_page,XL
ret
api_pageget: lds XL,xram_page
ret
;-------------------------------------------------------------------------------
; new since v1.37
;-------------------------------------------------------------------------------
api_scale: jmp math_scale
api_spisel: jmp libdfl_sel
api_spiunsel: jmp libdfl_unsel
api_spicomm: jmp libdfl_out
;-------------------------------------------------------------------------------
;
;-------------------------------------------------------------------------------
api_xmem_rb: ldi ZL,xmem_bread
rjmp a_xmemcheck
api_xmem_rw: ldi ZL,xmem_wread
rjmp a_xmemcheck
api_xmem_wb: ldi ZL,xmem_bwrite
rjmp a_xmemcheck
api_xmem_ww: ldi ZL,xmem_wwrite
rjmp a_xmemcheck
api_xmem_chk: ldi ZL,xmem_check
rjmp a_xmemcheck
api_xmem_clr: ldi ZL,xmem_clear
a_xmemcheck: lds ZH,prg_xmem
sbrs ZH,7
ijmp
pop r0 ;kill stack
pop r0
ret