diff --git a/README.md b/README.md index 39db55a..fe43985 100644 --- a/README.md +++ b/README.md @@ -1 +1,4 @@ -# common \ No newline at end of file +# common + +* master: [![Build Status](https://travis-ci.org/c64lib/common.svg?branch=master)](https://travis-ci.org/c64lib/common) +* develop: [![Build Status](https://travis-ci.org/c64lib/common.svg?branch=develop)](https://travis-ci.org/c64lib/common) diff --git a/common.asm b/common.asm index 81b91bd..7716269 100644 --- a/common.asm +++ b/common.asm @@ -8,7 +8,7 @@ * value: byte to be negated */ .function neg(value) { - .return value ^ $FF + .return value ^ $FF } .assert "neg($00) gives $FF", neg($00), $FF .assert "neg($FF) gives $00", neg($FF), $00 diff --git a/mem.asm b/mem.asm index eda3128..ae4eb68 100644 --- a/mem.asm +++ b/mem.asm @@ -1,95 +1,105 @@ #importonce .filenamespace c64lib +/* + * MOS 650X Vector table constants. + */ +.label NMI_LO = $FFFA +.label NMI_HI = $FFFB +.label RESET_LO = $FFFC +.label RESET_HI = $FFFD +.label IRQ_LO = $FFFE +.label IRQ_HI = $FFFF + /* * Adds 16 bit number "value" to given memory cell specified by "low" address. * * MOD: A, C */ .macro add16(value, low) { - clc - lda low - adc #value - sta low + 1 + clc + lda low + adc #value + sta low + 1 } .assert "add16($0102, $A000)", { :add16($0102, $A000) }, { - clc; lda $A000; adc #$02; sta $A000 - lda $A001; adc #$01; sta $A001 + clc; lda $A000; adc #$02; sta $A000 + lda $A001; adc #$01; sta $A001 } - + /* * Subtracts 16 bit number "value" from given memory cell specified by "low" address. * * MOD: A, C */ .macro sub16(value, low) { - sec - lda low - sbc #value - sta low + 1 + sec + lda low + sbc #value + sta low + 1 } .assert "sub16($0102, $A000)", { :sub16($0102, $A000) }, { - sec; lda $A000; sbc #$02; sta $A000 - lda $A001; sbc #$01; sta $A001 + sec; lda $A000; sbc #$02; sta $A000 + lda $A001; sbc #$01; sta $A001 } - + /* * Adds value from "source" memory location to value in "destination" memory location. * * MOD: A, C */ .macro addMem16(source, destination) { - clc - lda source - adc destination - sta destination - lda source + 1 - adc destination + 1 - sta destination + 1 + clc + lda source + adc destination + sta destination + lda source + 1 + adc destination + 1 + sta destination + 1 } .assert "addMem16($A000, $B000)", { :addMem16($A000, $B000) }, { - clc; lda $A000; adc $B000; sta $B000 - lda $A001; adc $B001; sta $B001 + clc; lda $A000; adc $B000; sta $B000 + lda $A001; adc $B001; sta $B001 } - + /* * Subtracts value from "source" memory location from value in "destination" memory location. * * MOD: A, C */ -.macro subMem16(source, destination) { - sec - lda destination - sbc source - sta destination - lda destination + 1 - sbc source + 1 - sta destination + 1 +.macro subMem16(source, destination) { + sec + lda destination + sbc source + sta destination + lda destination + 1 + sbc source + 1 + sta destination + 1 } .assert "subMem16($A000, $B000)", { :subMem16($A000, $B000) }, { - sec; lda $B000; sbc $A000; sta $B000 - lda $B001; sbc $A001; sta $B001 + sec; lda $B000; sbc $A000; sta $B000 + lda $B001; sbc $A001; sta $B001 } - + /* * Shifts left 2 byte number specified with "low" address. Carry flag indicates last bit that has been "shifted out". * * MOD: A, C */ .macro asl16(low) { - clc - asl low - bcc !+ - lda low + 1 - asl - ora #%1 - sta low + 1 + clc + asl low + bcc !+ + lda low + 1 + asl + ora #%1 + sta low + 1 !: } @@ -99,18 +109,18 @@ * MOD: A */ .macro copyFast(source, destination, count) { - .for(var i = 0; i < count; i++) { - lda source + i - sta destination + i - } + .for(var i = 0; i < count; i++) { + lda source + i + sta destination + i + } } .assert "copyFast($A000, $B000, 0) copies nothing", { :copyFast($A000, $B000, 0) }, {} .assert "copyFast($A000, $B000, 1) copies one byte", { :copyFast($A000, $B000, 1) }, { - lda $A000; sta $B000 + lda $A000; sta $B000 } .assert "copyFast($A000, $B000, 2) copies two bytes", { :copyFast($A000, $B000, 2) }, { - lda $A000; sta $B000 - lda $A001; sta $B001 + lda $A000; sta $B000 + lda $A001; sta $B001 } /* @@ -119,15 +129,15 @@ * MOD: A, X */ .macro fillScreen(address, value) { - lda #value - ldx #$00 + lda #value + ldx #$00 loop: - sta address, x - sta address + $0100, x - sta address + $0200, x - sta address + $0300, x - inx - bne loop + sta address, x + sta address + $0100, x + sta address + $0200, x + sta address + $0300, x + inx + bne loop } /* @@ -136,9 +146,9 @@ loop: * MOD: - */ .macro inc16(destination) { - inc destination - bne !+ - inc destination + 1 + inc destination + bne !+ + inc destination + 1 !: } @@ -148,8 +158,8 @@ loop: * MOD: A */ .macro set8(value, mem) { - lda #value - sta mem + lda #value + sta mem } /* @@ -158,22 +168,22 @@ loop: * MOD: A */ .macro set16(value, mem) { - :set8(value, mem + 1) + :set8(value, mem + 1) } .assert "set16($1234, $A000) stores $34 under $A000 and $12 under $A001", { :set16($3412, $A000) }, { - lda #$12 - sta $A000 - lda #$34 - sta $A001 + lda #$12 + sta $A000 + lda #$34 + sta $A001 } .macro copyWordIndirect(source, destinationPointer) { - ldy #0 - lda source - sta (destinationPointer), y - iny - lda source + 1 - sta (destinationPointer), y -} - + ldy #0 + lda source + sta (destinationPointer), y + iny + lda source + 1 + sta (destinationPointer), y +} +