cc65/libsrc/cbm/cbm_filetype.s

72 lines
1.6 KiB
ArmAsm

;
; Determine the CBM file type. From cbm_dir.c by Josef Soucek. Moved into an
; assembler function by Ullrich von Bassewitz 2012-06-03
;
; unsigned char __fastcall__ _cbm_filetype (unsigned char c);
;
.include "cbm_filetype.inc"
.macpack generic
; --------------------------------------------------------------------------
; Table with types for a list of start characters
.rodata
.proc TypeTable
.byte CBM_T_CBM ; c
.byte CBM_T_DEL ; d
.byte CBM_T_OTHER ; e
.byte CBM_T_OTHER ; f
.byte CBM_T_OTHER ; g
.byte CBM_T_OTHER ; h
.byte CBM_T_OTHER ; i
.byte CBM_T_OTHER ; j
.byte CBM_T_OTHER ; k
.byte CBM_T_LNK ; l
.byte CBM_T_OTHER ; m
.byte CBM_T_OTHER ; n
.byte CBM_T_OTHER ; o
.byte CBM_T_PRG ; p
.byte CBM_T_OTHER ; q
.byte CBM_T_REL ; r
.byte CBM_T_SEQ ; s
.byte CBM_T_OTHER ; t
.byte CBM_T_USR ; u
.byte CBM_T_VRP ; v
.endproc
; --------------------------------------------------------------------------
; Mapper function
.code
.proc __cbm_filetype
ldx #0 ; Clear high byte
; Check that the given char is in table range
sec
sbc #'c'
bcc L1
cmp #.sizeof (TypeTable)
bge L1
; Ok, load the type
tay
lda TypeTable,y
rts
; Out of table range, return CBM_T_OTHER
L1: lda #CBM_T_OTHER
rts
.endproc