/* Alternatywna postać procedur i makr przekazujących parametry do struktury .PROC Wolniejsza w cyklach od CALL.ASM, jednak zajmująca mniej miejsca w pamięci, pod warunkiem ze uzywamy procedur z zadeklarowanycmi parametrami */ * ---------------------------------------------- * * procedury @SAVE_LONG, @SAVE_WORD, @SAVE_BYTE * * zadzialaja wylacznie w n/w kolejnosci * * ---------------------------------------------- * @save_long .proc stx @regX+1 ldx @stack_pointer sta @stack_address,x inx @regX lda #0 .endp @save_word .proc sta @stack_address,x tya inx .endp @save_byte .proc sta @stack_address,x inx rts .endp * ---------------------------- * * adresowanie natychmiastowe * * ---------------------------- * @call_nat .macro .if :1='B' lda #:2 @save_byte .else .if :1='W' lda <:2 ldy >:2 @save_word .else stx @stack_pointer lda <:2 ldx >:2 ldy ^:2 @save_long .endif .endif .endm * ----------------------- * * adresowanie absolutne * * ----------------------- * @call_abs .macro .if :1='B' lda :2 @save_byte .else .if :1='W' lda :2 ldy :2+1 @save_word .else stx @stack_pointer lda :2 ldx :2+1 ldy :2+2 @save_long .endif .endif .endm * -------------------------------- * * przekazanie parametrow na stos * * -------------------------------- * * tylko pierwszy parametr moze byc przekazany przez akumulator @ @call .macro .if :2>>24<>$FF .and :3>>24<>$FF .and :4>>24<>$FF ldx @stack_pointer .if :2='@' @save_byte .else .if :2='#' @call_nat :3,:4 .else @call_abs :3,:4 .endif .endif .endif .if :5>>24<>$FF .and :6>>24<>$FF .and :7>>24<>$FF .if :5='#' @call_nat :6,:7 .else @call_abs :6,:7 .endif .endif .if :8>>24<>$FF .and :9>>24<>$FF .and :10>>24<>$FF .if :8='#' @call_nat :9,:10 .else @call_abs :9,:10 .endif .endif stx @stack_pointer jsr :1 .endm