;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ;Û Û ;Û OPCODE PROCEDURES Û ;Û Û ;Û These procedures are not optimized. Û ;Û Û ;Û NOTE: '&' - this char can use only with PROC/PROCS and MACRO. Û ;Û Û ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ;----------------------------------------------------------------------------- ; Push all registers. ;----------------------------------------------------------------------------- PHR MACRO pha txa pha tya pha ENDM ;----------------------------------------------------------------------------- ; Pop all registers. ;----------------------------------------------------------------------------- PLR MACRO pla tay pla tax pla ENDM ;----------------------------------------------------------------------------- ; Divide YX:A=YX.A. ;----------------------------------------------------------------------------- DIV PROC stx _bta_ sty _bta_+1 sta _btb_+2 php lda #0 sta _btb_+3 plp _div_print_: php lda #0 sta _bta_+2 STA _bta_+3 sta _btb_+0 sta _btb_+1 ldx #16 _loop_div_: lsr _btb_+3 ror _btb_+2 ror _btb_+1 ROR _btb_+0 sec lda _bta_+0 sbc _btb_+0 tay lda _bta_+1 sbc _btb_+1 sta _div1_ lda _bta_+2 sbc _btb_+2 sta _div2_ lda _bta_+3 sbc _btb_+3 bcc _nxt_div_ STY _bta_+0 sta _bta_+3 ldy _div1_ lda _div2_ sty _bta_+1 sta _bta_+2 _nxt_div_: rol _rsl_ ROL _rsl_+1 dex bne _loop_div_ ldx _rsl_ ldy _rsl_+1 lda _bta_ plp rts ifndef _bta_ _bta_ dw 0,0 _btb_ dw 0,0 _rsl_ dw 0,0 endndef _div1_ db 0 _div2_ DB 0 ENDP ;----------------------------------------------------------------------------- ; Multiply YX*A=YXA. ;----------------------------------------------------------------------------- MUL PROC php eor #%11111111 STA _bta_ stx _btb_ sty _btb_+1 ldx #0 stx _btb_+2 stx _rsl_ stx _rsl_+1 stx _rsl_+2 ldx #8 _loop_mul_: lsr _bta_ bcs _next_mul_ lda _btb_ adc _rsl_ STA _rsl_ lda _btb_+1 adc _rsl_+1 sta _rsl_+1 lda _btb_+2 adc _rsl_+2 sta _rsl_+2 _next_mul_: ASL _btb_ rol _btb_+1 rol _btb_+2 dex bne _loop_mul_ lda _rsl_ ldx _rsl_+1 ldy _rsl_+2 plp RTS ifndef _bta_ _bta_ DW 0,0 _btb_ dw 0,0 _rsl_ dw 0,0 endndef ENDP ;----------------------------------------------------------------------------- ; Add with CF=0. ;----------------------------------------------------------------------------- ADD MACRO operand clc adc operand ENDM ;----------------------------------------------------------------------------- ; Substract with CF=1. ;----------------------------------------------------------------------------- SUB MACRO operand SEC SBC operand ENDM