/* przykladowy program wykorzystujacy strukture .PROC i .MACRO program realizuje zamiane wartosci typu WORD na postac hexadecymalna */ org $2000 @stack_address = $400 ; wymagane przez MADS etykiety @stack_pointer = $ff main lda #0 sta @stack_pointer ; zerujemy wskaznik stosu hex #* ; wywolujemy procedure HEX, parametrem jest wartosc=aktualny adres loop jmp loop ; petla bez konca * ------- * * MACRO * * ------- * // przykladowe makro, ktore odwola sie do parametru na stosie // rezygnujac z tego makra mozemy sami odwolywac sie do parametrow dzieki czemu // bedziemy mieli mozliwosc optymalizacji (nadmiarowe LDX @stack_pointer), przykladem // takiej optymalizacji jest procedura LHEX @GetPar .macro loop ldx @stack_pointer lda :1,x .endm * ----------- * * PROCEDURE * * ----------- * // procedurka reprezentujaca wartosc 1-bajtowa (BYTE) // w postaci HEXadecymalnej lHex .proc {.byte low .word wynik} hlp equ $80 ldx @stack_pointer lda wynik,x sta hlp lda wynik+1,x sta hlp+1 lda low,x pha :4 lsr @ tay lda thex,y ldy #0 sta (hlp),y pla and #$0f tay lda thex,y ldy #1 sta (hlp),y .exit thex dta d'0123456789ABCDEF' .endp // procedurka reprezentujaca wartosc 2-bajtowa (WORD) // w postaci HEXadecymalnej hex .proc {.word par1} @GetPar par1 lHex @,#$bc42 ; @ oznacza ze pierwszy parametr to zawartosc akumulatora ; tylko na pierwszej pozycji jest on rozpoznawany przez makro .CALL @GetPar par1+1 lHex @,#$bc40 //.exit #0 ; mozliwe jest przekazanie wartosc przez .EXIT (do akumulatora) .endp ; w przypadku braku .EXIT dyrektywa .ENDP wywola @ExitProc opt l- icl '\macros\call.asm' icl '\macros\ExitProc.asm' ; --- run main