From d895290a8a3c602f92c7f57ebb929e141b045e34 Mon Sep 17 00:00:00 2001 From: alpine9000 Date: Sun, 13 Mar 2016 19:39:42 +1100 Subject: [PATCH] Updates for dual playfield example --- 017.dual_playfield/Makefile | 4 +- 017.dual_playfield/README.md | 56 +++++++++++++++++- 017.dual_playfield/constants.i | 2 +- 017.dual_playfield/dual_playfield_mode.s | 29 +++++---- 017.dual_playfield/init.s | 8 ++- 017.dual_playfield/screenshots/screenshot.png | Bin 0 -> 5966 bytes .../screenshots/screenshot2.png | Bin 0 -> 5796 bytes assets/playfield1_8.png | Bin 0 -> 4684 bytes assets/playfield2_8.png | Bin 0 -> 4574 bytes include/bplconbits.i | 3 +- 10 files changed, 84 insertions(+), 18 deletions(-) create mode 100644 017.dual_playfield/screenshots/screenshot.png create mode 100644 017.dual_playfield/screenshots/screenshot2.png create mode 100644 assets/playfield1_8.png create mode 100644 assets/playfield2_8.png diff --git a/017.dual_playfield/Makefile b/017.dual_playfield/Makefile index e488a6e..1d8bd0d 100644 --- a/017.dual_playfield/Makefile +++ b/017.dual_playfield/Makefile @@ -1,8 +1,8 @@ MODULE=dual_playfield_mode.s FLOPPY=bin/dual_playfield_mode.adf IMAGEDATA=out/playfield1-palette.s out/playfield2-palette.s out/playfield1.bin out/playfield2.bin -PF1_FILE=../assets/playfield1.png -PF2_FILE=../assets/playfield2.png +PF1_FILE=../assets/playfield1_8.png +PF2_FILE=../assets/playfield2_8.png EXTRA=$(IMAGEDATA) init.s utils.s constants.i Makefile BASE_ADDRESS=10000 diff --git a/017.dual_playfield/README.md b/017.dual_playfield/README.md index ccd1f43..1728c25 100644 --- a/017.dual_playfield/README.md +++ b/017.dual_playfield/README.md @@ -1,7 +1,61 @@ dual playfield ============== -Work in progress +We now try and set up a dual playfield screen with 3 bitplanes per playfield. This gives us 7 colors + transparent for each playfield. + +Set the number of bitplanes per playfield in [constants.i](constants.i] + + ``` + SCREEN_BIT_DEPTH equ 3 ; 3 bitplanes per playfield +``` + +New copper list that assigns bitplanes to each playfield after poking in [dual_playfield_mode.s](dual_playfield_mod.s] + + ``` +copper: +pf1_bitplanepointers: + ;; this is where bitplanes are assigned to playfields + ;; http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node0079.html + ;; for 3 bitplanes per playfield, playfield1 gets bitplanes 1,3,5 + dc.w BPL1PTL,0 + dc.w BPL1PTH,0 + dc.w BPL3PTL,0 + dc.w BPL3PTH,0 + dc.w BPL5PTL,0 + dc.w BPL5PTH,0 +pf2_bitplanepointers: + ;; for 3 bitplanes per playfieldd, playfield2 gets bitplanes 2,4,6 + dc.w BPL2PTL,0 + dc.w BPL2PTH,0 + dc.w BPL4PTL,0 + dc.w BPL4PTH,0 + dc.w BPL6PTL,0 + dc.w BPL6PTH,0 + dc.l $fffffffe +``` + +Poke the copper list with the bitplane pointer addresses: + + ``` + ;; poke playfield 1 bitplane pointers + lea pf1_bitplanepointers(pc),a0 + lea pf1_bitplanes(pc),a1 + bsr.s pokeBitplanePointers + + ;; poke playfield 2 bitplane pointers + lea pf2_bitplanepointers(pc),a0 + lea pf2_bitplanes(pc),a1 + bsr.s pokeBitplanePointers +``` + +Enable 2x the bitplanes, and optionally re-order the bitplanes: + + ``` + ;; enable 2x the bitplanes as 2x playfields + move.w #((SCREEN_BIT_DEPTH*2)<<12)|COLOR_ON|DBLPF,BPLCON0(a6) + ;; set playfield2 to have priority + move.w #PF2PRI, BPLCON2(a6) +``` try it ------ diff --git a/017.dual_playfield/constants.i b/017.dual_playfield/constants.i index 2f85b31..0929ed5 100644 --- a/017.dual_playfield/constants.i +++ b/017.dual_playfield/constants.i @@ -3,7 +3,7 @@ LVL3_INT_VECTOR equ $6c SCREEN_WIDTH equ 320 SCREEN_HEIGHT equ 256 SCREEN_WIDTH_BYTES equ (SCREEN_WIDTH/8) -SCREEN_BIT_DEPTH equ 1 +SCREEN_BIT_DEPTH equ 3 ; 3 bitplanes per playfield SCREEN_RES equ 8 ; 8=lo resolution, 4=hi resolution RASTER_X_START equ $81 ; hard coded coordinates from hardware manual RASTER_Y_START equ $2c diff --git a/017.dual_playfield/dual_playfield_mode.s b/017.dual_playfield/dual_playfield_mode.s index c553969..18f63c5 100644 --- a/017.dual_playfield/dual_playfield_mode.s +++ b/017.dual_playfield/dual_playfield_mode.s @@ -1,23 +1,22 @@ include "../include/registers.i" include "hardware/dmabits.i" include "hardware/intbits.i" - include "constants.i" entry: lea CUSTOM,a6 bsr init - bsr.s installColorPalette .mainLoop: bsr waitVerticalBlank - bra .mainLoop include "init.s" include "utils.s" - -pokeBitplanePointers: ; d0 = frame offset in bytes, a0 = BPLP copper list address + +pokeBitplanePointers: + ;; a0 = BPLP copper list address + ;; a1 = address of playfield's interleaved bitplane data movem.l d0-a6,-(sp) moveq #SCREEN_BIT_DEPTH-1,d0 .bitplaneloop: @@ -33,24 +32,30 @@ pokeBitplanePointers: ; d0 = frame offset in bytes, a0 = BPLP copper list addr installColorPalette: + ;; these palette files set the correct colors for each playfield + ;; playfield1 uses COLOR00 -> COLOR07 include "out/playfield1-palette.s" + ;; playfield2 uses COLOR08 -> COLOR15 include "out/playfield2-palette.s" rts copper: - ;; bitplane pointers must be first else poking addresses will be incorrect -pf1_bitplanepointers: +pf1_bitplanepointers: + ;; this is where bitplanes are assigned to playfields + ;; http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node0079.html + ;; for 3 bitplanes per playfield, playfield1 gets bitplanes 1,3,5 dc.w BPL1PTL,0 dc.w BPL1PTH,0 -pf2_bitplanepointers: - dc.w BPL2PTL,0 - dc.w BPL2PTH,0 dc.w BPL3PTL,0 dc.w BPL3PTH,0 - dc.w BPL4PTL,0 - dc.w BPL4PTH,0 dc.w BPL5PTL,0 dc.w BPL5PTH,0 +pf2_bitplanepointers: + ;; for 3 bitplanes per playfield, playfield2 gets bitplanes 2,4,6 + dc.w BPL2PTL,0 + dc.w BPL2PTH,0 + dc.w BPL4PTL,0 + dc.w BPL4PTH,0 dc.w BPL6PTL,0 dc.w BPL6PTH,0 diff --git a/017.dual_playfield/init.s b/017.dual_playfield/init.s index 140a440..76ca918 100644 --- a/017.dual_playfield/init.s +++ b/017.dual_playfield/init.s @@ -8,10 +8,12 @@ init: ;; set up default palette bsr.s installColorPalette + ;; poke playfield 1 bitplane pointers lea pf1_bitplanepointers(pc),a0 lea pf1_bitplanes(pc),a1 bsr.s pokeBitplanePointers + ;; poke playfield 2 bitplane pointers lea pf2_bitplanepointers(pc),a0 lea pf2_bitplanes(pc),a1 bsr.s pokeBitplanePointers @@ -19,13 +21,17 @@ init: ;; set up playfield move.w #(RASTER_Y_START<<8)|RASTER_X_START,DIWSTRT(a6) move.w #((RASTER_Y_STOP-256)<<8)|(RASTER_X_STOP-256),DIWSTOP(a6) - + move.w #(RASTER_X_START/2-SCREEN_RES),DDFSTRT(a6) move.w #(RASTER_X_START/2-SCREEN_RES)+(8*((SCREEN_WIDTH/16)-1)),DDFSTOP(a6) + ;; enabled 2x the bitplanes as 2x playfields move.w #((SCREEN_BIT_DEPTH*2)<<12)|COLOR_ON|DBLPF,BPLCON0(a6) + ;; set playfield2 to have priority + move.w #PF2PRI, BPLCON2(a6) move.w #SCREEN_WIDTH_BYTES*SCREEN_BIT_DEPTH-SCREEN_WIDTH_BYTES,BPL1MOD(a6) move.w #SCREEN_WIDTH_BYTES*SCREEN_BIT_DEPTH-SCREEN_WIDTH_BYTES,BPL2MOD(a6) + ;; install copper list, then enable dma and selected interrupts diff --git a/017.dual_playfield/screenshots/screenshot.png b/017.dual_playfield/screenshots/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..122bf422ea495adc21d024aaa261d8d8d62c4fa3 GIT binary patch literal 5966 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 literal 0 HcmV?d00001 diff --git a/assets/playfield1_8.png b/assets/playfield1_8.png new file mode 100644 index 0000000000000000000000000000000000000000..4eaa7d8c634840ad1b57c1ff96376572fb0a0851 GIT binary patch literal 4684 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 literal 0 HcmV?d00001 diff --git a/include/bplconbits.i b/include/bplconbits.i index cda50b0..816b667 100644 --- a/include/bplconbits.i +++ b/include/bplconbits.i @@ -1,4 +1,5 @@ COLOR_ON equ $200 LACE equ $004 HOMOD equ $800 -DBLPF equ $400 \ No newline at end of file +DBLPF equ $400 +PF2PRI equ $040 \ No newline at end of file