******************************** *                              * * MERLIN128 MACRO LIBRARY      * * BY AHIMSADUTA                * *                              * ******************************** * tO USE THIS LIBRARY, JUST DELETE THE COMMENT LINES * AND SAVE AS "MACRO.S" * tHEN, IN YOUR PROGRAM, USE THE PSEUDO OP *        use   "MACRO.S" * TO LOAD IN.  yOU WILL PROBABLY ALSO WANT TO USE THE * PSEUDO OPS: exp off tr on * TO MAKE A MORE READABLE PRINTOUT. *=============================== * CR * * USE: *   EQUIVALENT TO basic'S printchr$(13) * PREP: *   CHROUT=$FFD2 IN EQUATES * SYNTAX: *         CR * cr mac lda #13 jsr chrout <<< *------------------------------- * LYZ * * USE: *   LOAD Y REGISTER WITH ZERO * SYNTAX: *        LYZ * lyz mac ldy #0 <<< *------------------------------- * LXZ * * USE: *   LOAD X REGISTER WITH ZERO * SYNTAX: *        LXZ * lxz mac ldx #0 <<< *------------------------------- * LAZ * * USE: *   LOAD ACCUMULATOR WITH ZERO * SYNTAX: *        LAZ * laz mac lda #0 <<< *------------------------------- * SAVY * * USE: *   SAVE Y REGISTER * PREP: *   VARIABLE "YTEMP", PREFERABLY IN ZERO PAGE * SYNTAX: *        SAVY * savy mac sty ytemp <<< *------------------------------- * SAVX * * USE: *   SAVE X REGISTER * PREP: *   VARIABLE "XTEMP", PREFERABLY IN ZERO PAGE * SYNTAX: *        SAVX * savx mac stx xtemp <<< *------------------------------- * SAVA * * USE: *   SAVE A REGISTER * PREP: *   VARIABLE "ATEMP", PREFERABLY IN ZERO PAGE * SYNTAX: *        SAVA * sava mac sta atemp <<< *------------------------------- * RESY * * USE: *   RESTORE Y REGISTER (AFTER USING SAVY) * PREP: *   VARIABLE "YTEMP" * SYNTAX: *        RESY * resy mac ldy ytemp <<< *------------------------------- * RESX * * USE: *   RESTORE X REGISTER (AFTER USING SAVX) * PREP: *   VARIABLE "XTEMP" IN ZPAGE * SYNTAX: *        RESX * resx mac ldx xtemp <<< *------------------------------- * RESA * * USE: *   RESTORE A REGISTER (AFTER USING SAVA) * PREP: *   VARIABLE "ATEMP" * SYNTAX: *        RESA * resa mac lda atemp <<< *------------------------------- * SET * * USE: *   SETS ZPAGE POINTERS TO MEM ADDRESS * PREP: *   ZPAGE POINTERS & MEM ADDRESS IN EQUATES * SYNTAX: *        SET   (MEM ADDRESS);(ZP POINTER) * EXAMPLE: *        SET   MENU;POINTER1 * set mac lda #<]1 sta ]2 lda #>]1 sta ]2+1 <<< *------------------------------- * POKE * * USE: *   POKES A VALUE TO MEM ADDRESS * SYNTAX: *        POKE (ADDRESS);(VALUE) * EXAMPLE: *        POKE $1300;#$FF * poke mac lda ]2 sta ]1 <<< *------------------------------- * PEEK * * USE: *   PEEKS A VALUE FROM ADDRESS, RESULTS IN ACCUMULATOR * SYNTAX: *        PEEK (ADDRESS) * EXAMPLE: *        PEEK $1300 * peek mac lda ]1 <<< *------------------------------- * ADD * * USE: *   ADDS A VALUE A 2-BYTE SET OF POINTERS * SYNTAX: *        ADD   (VALUE);(POINTERS) * EXAMPLE: *        ADD   TEMP;POINTER1 * add mac clc lda ]2 adc ]1 sta ]2 lda ]2+1 adc #0 sta ]2+1 <<< *------------------------------- * PRINT * * USE: *   OUTPUTS TEXT TO CURRENT DEVICE * PREP: *   CHROUT=$FFD2 IN EQUATES * SYNTAX: *        PRINT (TEXT) * EXAMPLE: *        PRINT 'wHICH MENU ITEM' * print mac savy jmp ]start ]text txt ]1 hex 0d00 ]start lyz ]loop lda ]text,y beq ]end jsr chrout iny bne ]loop ]end resy <<< *------------------------------- * FAST * * USE: *   EQUIVALENT TO basic'S fast * SYNTAX: *        fast * fast mac lda $d030 ora #%00000001 sta $d030 <<< *------------------------------- * SLOW * * USE: *   EQUIVALENT TO basic'S slow * SYNTAX: *        slow * slow mac lda $d030 and %11111110 sta $d030 <<< *------------------------------- * BLOAD * * USE: *   EQUIVALENT TO basic'S bload * PREP: *   SETBNK=$FF68, SETLFS=$FFBA, SETNAM=$FFBD *   LOAD=$FFD5 IN EQUATES * SYNTAX: *       bload '(FILENAME)';(BANK);(LOAD ADDRESS) * EXAMPLE: *       bload 'SPRITES';0;$0E00 * bload mac jmp ]start ]fname txt ]1 ]start lda ]start-]fname ldx #<]fname ldy #>]fname jsr setnam lda #]2 tax jsr setbnk lda #0 tay ldx #8 jsr setlfs lda #0 ldx #<]3 ldy #>]3 jsr load <<< *------------------------------- * BSAVE * * USE: *   EQUIVALENT TO basic'S bsave * PREP: *   SETBNK=$FF68, SETLFS=$FFBA, SETNAM=$FFBD *   SAVE=$FFDB IN EQUATES *   2-BYTE POINTER IN ZPAGE ("pointer") * SYNTAX: *       bsave '(FILENAME)';(BANK);(START);(END+1) * EXAMPLE: *       bsave 'SPRITES';0;$0E00;1000 * bsave mac jmp ]start ]fname txt '@0:' txt ]1 ]start lda #<]3 sta pointer lda #>]3 sta pointer+1 lda ]start-]fname ldx #<]fname ldy #>]fname+1 jsr setnam lda #]2 tax jsr setbnk lda #0 tay ldx #8 jsr setlfs lda #pointer ldx #<]4 ldy #>]4 jsr save <<< *------------------------------- * CLS * * USE: *   CLEARS THE SCREEN * PREP: *   CHROUT=$FFD2 IN EQUATES * SYNTAX: *        CLS * cls mac lda #147 jsr chrout <<< *------------------------------- * RING * * USE: *   RINGS THE BELL; SAME AS printchr$(7) * PREP: *   CHROUT=$FFD2 IN EQUATES * SYNTAX: *        RING * ring mac lda #7 jsr chrout <<< *------------------------------- * WAIT * * USE: *   SAME AS basic'S wait *   (WAITS FOR AN ADDRESS TO BE A SPECIFIC VALUE) * SYNTAX: *        WAIT (ADDRESS);(VALUE) * EXAMPLE: *        WAIT $D0;#1 * wait mac ]loop lda ]1 cmp ]2 bne ]loop <<< *------------------------------- * SLEEP * * USE: *   CREATES A DELAY * SYNTAX: *       SLEEP (VALUE) * EXAMPLE: *       SLEEP #$20 * sleep mac lda $d030 pha slow ldy ]1 ]loop1 ldx #0 ]loop2 inx bne ]loop2 dey bne ]loop1 pla sta $d030 <<< *------------------------------- * GETKEY * * USE: *   WAITS UNTIL IS KEY IS PRESSED * SYNTAX: *       GETKEY * getkey mac poke $d0;#0 ]loop lda $d0 beq ]loop <<< *===============================