📄 spp_dev_a.xap
字号:
MODULE crt0 .LARGE ; Not really, but we need the space for DEBUG; Define the segment layout .SEG VAREND .PACK {INIT, VAR, VAREND}, {H'400, H'800} .PACK {CONST, INITC}, {H'7400, H'D400}; This segment holds stabs debug info and doesn't make it onto bluecore .CSEG DEBUG ORG H'10000; Put labels at selected positions so; we can deduce segment size and placement .SEG INITINIT: .SEG VARVAR: .SEG VARENDVAREND: .SEG CONSTCONST: .SEG INITCINITC:$XAP_AH EQU H'ffe0$XAP_AL EQU H'ffe1$XAP_UXL EQU H'ffe2$XAP_UY EQU H'ffe3; Put the version number at the start of the CONST segment .SEG CONST DC 1541 ; updated by Makefile from syscalls; ****************************************************************************; Startup code; **************************************************************************** .CODE ORG H'0000 ld al,#VAR-INIT ; Size of INIT segment ld ah,#INIT ld x,#INITC bc2 ; AL is now zero ld ah,#VAREND-VAR ; Size of BSS segment beq skip_zero ld x,#VARloop_zero: st al,@(0,x) add x,#1 sub ah,#1 bne loop_zeroskip_zero: ; call init code, normally empty bsr $__init ld ah,#0 ld al,#0 bsr $_main ; Main may exit by returning or by explicitly calling $exit. ; In either case exit code will be in AH ; Note 'real' programs are unlikely to exit. bra $_exit$_abort: ; Exit abnormally ld ah,#1 bra $_exit_exit EQU $_exit ENDMOD MODULE malloc .ENHANCED .CSEG CODE .LARGE$_malloc: DC ((256*3)+9) rtstrapset_1 EQU $trapset_1 ENDMOD malloc MODULE free .ENHANCED .CSEG CODE .LARGE$_free: DC ((256*4)+9) rtstrapset_1 EQU $trapset_1 ENDMOD free MODULE realloc .ENHANCED .CSEG CODE .LARGE$_realloc: DC ((256*5)+9) rtstrapset_1 EQU $trapset_1 ENDMOD realloc MODULE exit .ENHANCED .CSEG CODE .LARGE$_exit: DC ((256*7)+9) rtstrapset_1 EQU $trapset_1 ENDMOD exit MODULE MessageSendLater .ENHANCED .CSEG CODE .LARGE$_MessageSendLater: DC ((256*9)+9) rtstrapset_1 EQU $trapset_1 ENDMOD MessageSendLater MODULE MessageCancelFirst .ENHANCED .CSEG CODE .LARGE$_MessageCancelFirst: DC ((256*10)+9) rtstrapset_1 EQU $trapset_1 ENDMOD MessageCancelFirst MODULE Panic .ENHANCED .CSEG CODE .LARGE$_Panic: DC ((256*14)+9) rtstrapset_1 EQU $trapset_1 ENDMOD Panic MODULE PanicNull .ENHANCED .CSEG CODE .LARGE$_PanicNull: DC ((256*15)+9) rtstrapset_1 EQU $trapset_1 ENDMOD PanicNull MODULE PsStore .ENHANCED .CSEG CODE .LARGE$_PsStore: DC ((256*17)+9) rtstrapset_1 EQU $trapset_1 ENDMOD PsStore MODULE PsRetrieve .ENHANCED .CSEG CODE .LARGE$_PsRetrieve: DC ((256*18)+9) rtstrapset_1 EQU $trapset_1 ENDMOD PsRetrieve MODULE PsFullRetrieve .ENHANCED .CSEG CODE .LARGE$_PsFullRetrieve: DC ((256*21)+9) rtstrapset_1 EQU $trapset_1 ENDMOD PsFullRetrieve MODULE MessagePioTask .ENHANCED .CSEG CODE .LARGE$_MessagePioTask: DC ((256*36)+9) rtstrapset_1 EQU $trapset_1 ENDMOD MessagePioTask MODULE PioDebounce .ENHANCED .CSEG CODE .LARGE$_PioDebounce: DC ((256*37)+9) rtstrapset_1 EQU $trapset_1 ENDMOD PioDebounce MODULE PioGet .ENHANCED .CSEG CODE .LARGE$_PioGet: DC ((256*38)+9) rtstrapset_1 EQU $trapset_1 ENDMOD PioGet MODULE PioSet .ENHANCED .CSEG CODE .LARGE$_PioSet: DC ((256*39)+9) rtstrapset_1 EQU $trapset_1 ENDMOD PioSet MODULE PioSetDir .ENHANCED .CSEG CODE .LARGE$_PioSetDir: DC ((256*41)+9) rtstrapset_1 EQU $trapset_1 ENDMOD PioSetDir MODULE MessageFlushTask .ENHANCED .CSEG CODE .LARGE$_MessageFlushTask: DC ((256*46)+9) rtstrapset_1 EQU $trapset_1 ENDMOD MessageFlushTask MODULE PanicUnlessMalloc .ENHANCED .CSEG CODE .LARGE$_PanicUnlessMalloc: DC ((256*47)+9) rtstrapset_1 EQU $trapset_1 ENDMOD PanicUnlessMalloc MODULE StreamConfigure .ENHANCED .CSEG CODE .LARGE$_StreamConfigure: DC ((256*70)+9) rtstrapset_11 EQU $trapset_11 ENDMOD StreamConfigure MODULE StreamConnect .ENHANCED .CSEG CODE .LARGE$_StreamConnect: DC ((256*71)+9) rtstrapset_11 EQU $trapset_11 ENDMOD StreamConnect MODULE StreamSourceFromSink .ENHANCED .CSEG CODE .LARGE$_StreamSourceFromSink: DC ((256*74)+9) rtstrapset_11 EQU $trapset_11 ENDMOD StreamSourceFromSink MODULE SinkGetBdAddr .ENHANCED .CSEG CODE .LARGE$_SinkGetBdAddr: DC ((256*84)+9) rtstrapset_11 EQU $trapset_11 ENDMOD SinkGetBdAddr MODULE MessageSinkTask .ENHANCED .CSEG CODE .LARGE$_MessageSinkTask: DC ((256*85)+9) rtstrapset_11 EQU $trapset_11 ENDMOD MessageSinkTask MODULE MessageSinkGetTask .ENHANCED .CSEG CODE .LARGE$_MessageSinkGetTask: DC ((256*86)+9) rtstrapset_11 EQU $trapset_11 ENDMOD MessageSinkGetTask MODULE StreamSinksFromBdAddr .ENHANCED .CSEG CODE .LARGE$_StreamSinksFromBdAddr: DC ((256*87)+9) rtstrapset_11 EQU $trapset_11 ENDMOD StreamSinksFromBdAddr MODULE VmSendRfcommPrim .ENHANCED .CSEG CODE .LARGE$_VmSendRfcommPrim: DC ((256*102)+9) rtstrapset_14 EQU $trapset_14 ENDMOD VmSendRfcommPrim MODULE StreamRfcommSink .ENHANCED .CSEG CODE .LARGE$_StreamRfcommSink: DC ((256*103)+9) rtstrapset_14 EQU $trapset_14 ENDMOD StreamRfcommSink MODULE StreamUartSink .ENHANCED .CSEG CODE .LARGE$_StreamUartSink: DC ((256*104)+9) rtstrapset_15 EQU $trapset_15 ENDMOD StreamUartSink MODULE VmSendL2capPrim .ENHANCED .CSEG CODE .LARGE$_VmSendL2capPrim: DC ((256*106)+9) rtstrapset_16 EQU $trapset_16 ENDMOD VmSendL2capPrim MODULE VmSendDmPrim .ENHANCED .CSEG CODE .LARGE$_VmSendDmPrim: DC ((256*107)+9) rtstrapset_16 EQU $trapset_16 ENDMOD VmSendDmPrim MODULE VmSendSdpPrim .ENHANCED .CSEG CODE .LARGE$_VmSendSdpPrim: DC ((256*108)+9) rtstrapset_16 EQU $trapset_16 ENDMOD VmSendSdpPrim MODULE VmGetHandleFromPointer .ENHANCED .CSEG CODE .LARGE$_VmGetHandleFromPointer: DC ((256*109)+9) rtstrapset_16 EQU $trapset_16 ENDMOD VmGetHandleFromPointer MODULE VmGetPointerFromHandle .ENHANCED .CSEG CODE .LARGE$_VmGetPointerFromHandle: DC ((256*110)+9) rtstrapset_16 EQU $trapset_16 ENDMOD VmGetPointerFromHandle MODULE MessageBlueStackTask .ENHANCED .CSEG CODE .LARGE$_MessageBlueStackTask: DC ((256*111)+9) rtstrapset_16 EQU $trapset_16 ENDMOD MessageBlueStackTask MODULE StreamL2capSink .ENHANCED .CSEG CODE .LARGE$_StreamL2capSink: DC ((256*112)+9) rtstrapset_16 EQU $trapset_16 ENDMOD StreamL2capSink MODULE PioSetLed0 .ENHANCED .CSEG CODE .LARGE$_PioSetLed0: DC ((256*141)+9) rtstrapset_8 EQU $trapset_8 ENDMOD PioSetLed0 MODULE PioSetLed1 .ENHANCED .CSEG CODE .LARGE$_PioSetLed1: DC ((256*142)+9) rtstrapset_8 EQU $trapset_8 ENDMOD PioSetLed1 MODULE VmUseExtendedBluestackPrimitives .ENHANCED .CSEG CODE .LARGE$_VmUseExtendedBluestackPrimitives: DC ((256*148)+9) rtstrapset_16 EQU $trapset_16 ENDMOD VmUseExtendedBluestackPrimitives MODULE putchar .ENHANCED .CSEG CODE .LARGE$_putchar: DC ((256*8)+9) rtstrapset_1 EQU $trapset_1 ENDMOD putchar MODULE MessageWait .ENHANCED .CSEG CODE .LARGE$_MessageWait: DC ((256*11)+9) rtstrapset_1 EQU $trapset_1 ENDMOD MessageWait MODULE MessageSendConditionally .ENHANCED .CSEG CODE .LARGE$_MessageSendConditionally: DC ((256*12)+9) rtstrapset_1 EQU $trapset_1 ENDMOD MessageSendConditionally MODULE MessageFree .ENHANCED .CSEG CODE .LARGE$_MessageFree: DC ((256*13)+9) rtstrapset_1 EQU $trapset_1 ENDMOD MessageFree MODULE trapset_1 .CSEG CODE .LARGE .ENHANCED$trapset_1: ENDMOD trapset_1 MODULE trapset_11 .CSEG CODE .LARGE .ENHANCED$trapset_11: ENDMOD trapset_11 MODULE trapset_14 .CSEG CODE .LARGE .ENHANCED$trapset_14: ENDMOD trapset_14 MODULE trapset_8 .CSEG CODE .LARGE .ENHANCED$trapset_8: ENDMOD trapset_8 MODULE trapset_15 .CSEG CODE .LARGE .ENHANCED$trapset_15: ENDMOD trapset_15 MODULE trapset_16 .CSEG CODE .LARGE .ENHANCED$trapset_16: ENDMOD trapset_16 MODULE VmPutChar .ENHANCED .CSEG CODE .LARGE$_VmPutChar: DC ((256*27)+9) rtstrapset_1 EQU $trapset_1 ENDMOD VmPutChar MODULE e_t_c .ALLe_t_c: ENDMOD MODULE main .LARGE ; really small mode but we need space for debug symbols; GNU C version 3.3.3 (CSR version 25 for xap); compiled by GNU C version 3.2.3 (mingw special 20030504-1).;# options passed: -IC:/BlueLab401/tools/include/firmware;# -IC:/BlueLab401/tools/include/standard;# -IC:/BlueLab401/tools/include/profiles/BlueLab4.0.1-release -iprefix;# -isystem -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=3;# -DDEV_CASIRA -DNO_DEBUG -MD -MQ -mno-leaf-optim -ansi -auxbase-strip -g;# -O -pedantic -Wall -Wmissing-prototypes -Wstrict-prototypes;# -Wsign-compare -Wredundant-decls -Werror -ansi -fno-builtin-memcpy;# options enabled: -fdefer-pop -fthread-jumps -fpeephole -ffunction-cse;# -fkeep-static-consts -fpcc-struct-return -fgcse-lm -fgcse-sm;# -floop-optimize -fcrossjumping -fif-conversion -fif-conversion2;# -fsched-interblock -fsched-spec -fbranch-count-reg -fcprop-registers;# -fcommon -fgnu-linker -fargument-alias -fmerge-constants;# -fzero-initialized-in-bss -fleading-underscore -fident;# -fguess-branch-probability -fmath-errno -ftrapping-math -mpeephole;# -mquiet-mode -minline-block-copy-mode -menhanced-mode -mload-cache-mode;# -mbitfield-mode -mtest4 .ENHANCED .SEG VAR_failed_next?0?: DS 1 .CODE_tried_and_failed: enter #2?LBB_tried_and_failed: st AH,@H'fff8?LBB2: ld AL,#H'0000 st AL,@(-1,Y)?L7: ld AL,@(-1,Y) lsl #H'0010 asr #H'000E ld X,@$XAP_AL add AL,#(_failed_addr) st AL,@(0,Y) ld AH,@(_failed_addr,X) ld AL,@((_failed_addr+1),X) ld X,@H'fff8 cmp AH,@(0,X) bne ?L4 cmp AL,@(1,X) bne ?L4 ld X,@(0,Y) ld AL,@(H'0003,X) ld X,@H'fff8 cmp AL,@(H'0003,X) bne ?L4 ld X,@(0,Y) ld AL,@(H'0002,X) ld X,@H'fff8 cmp AL,@(H'0002,X) bne ?L4 ld AH,#H'0001 bra (?L1)?L4: ld AL,#H'0001 add AL,@(-1,Y) st AL,@(-1,Y) cmp AL,#H'0007 bcz ?L7 ld X,@_failed_next?0? st X,@(-1,Y) ld AL,@$XAP_UXL lsl #H'0010 asr #H'000E st AL,@H'fff9 ld AH,#(_failed_addr) add AH,@$XAP_AL ld X,@H'fff8 ld AL,@(0,X) ld X,@H'fff9 st AL,@(_failed_addr,X) ld X,@H'fff8 ld AL,@(H'0001,X) ld X,@$XAP_AH st AL,@(H'0001,X) ld X,@H'fff8 ld AL,@(H'0002,X) ld X,@$XAP_AH st AL,@(H'0002,X) ld X,@H'fff8 ld AL,@(H'0003,X) ld X,@$XAP_AH st AL,@(H'0003,X) ld AL,#H'0001 add AL,@(-1,Y) st AL,@_failed_next?0? cmp AL,#H'0008 bne ?L8 ld AL,#H'0000 st AL,@_failed_next?0??L8: ld AH,#H'0000?L1:?LBE2:?LBE_tried_and_failed: leave #2;.stabn 192,0,0,?LBB2;.stabn 224,0,0,?LBE2_unhandledSppState: enter #3?LBB_unhandledSppState: st AH,@(0,Y) st AL,@(H'0001,Y) ld AH,#(?LC0) bsr $_printf?LBE_unhandledSppState: leave #3 .SEG CONST?LC0: dc H'55 dc H'4E dc H'48 dc H'41 dc H'4E dc H'44 dc H'4C dc H'45 dc H'44 dc H'20 dc H'53 dc H'50 dc H'50 dc H'20 dc H'63 dc H'75 dc H'72 dc H'72 dc H'65 dc H'6E dc H'74 dc H'20 dc H'73 dc H'74 dc H'61 dc H'74 dc H'65 dc H'20 dc H'25 dc H'64 dc H'20 dc H'6D dc H'65 dc H'73 dc H'73 dc H'61 dc H'67 dc H'65 dc H'20 dc H'69 dc H'64 dc H'20 dc H'30 dc H'78 dc H'25 dc H'78 dc H'0A dc H'00 .CODE$_setSppState: enter #4?LBB_setSppState: st AH,@(H'0002,Y) ld AL,@_theSppApp+H'0006 st AL,@(0,Y) st AH,@(H'0001,Y) ld AH,#(?LC1) bsr $_printf ld AL,@(H'0002,Y) st AL,@_theSppApp+H'0006 cmp AL,#H'0004 bne ?L20 ld AH,#H'0000 bra (?L22)?L20: ld AH,#H'0001?L22: bsr $_ledsPlay?LBE_setSppState: leave #4 .SEG CONST?LC1: dc H'53 dc H'50 dc H'50 dc H'20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -