444 lines
12 KiB
NASM
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
|
|
|