|
Post by Roland on Oct 7, 2005 2:02:55 GMT -5
Hi, did anybody get the "Modulo to be added or subtracted at end of line count" routine of the DMA Controller (as described in the Docviewer) to work???
I have tried a lot, but it seems not to work... (..."simple" copying without "Modulo" works....)
|
|
|
Post by Six on Oct 7, 2005 10:36:24 GMT -5
There is a bug in the hardware. This BASIC code demonstrates how to work around it. (Thank you, Jeri)
1 A = 0 10 REM BLIT PROGRAMMING EXAMPLE 11 REM THIS PROGRAM READS A 5X5 BLOCK OF SCREEN MEMORY AND BLITS IT TO THE 12 REM UPPER LEFT CORNER OF THE SCREEN. 13 REM MAKE SURE YOU HAVE SOMETHING ON THE SCREEN BEFORE RUNNING PROGRAM. 14 REM IT ONLY SHOWS MOVING WITHIN A 256 BYTE WINDOW. 15 REM LINE(OR STRIDE) HAS A COUNTER MOVING IN THE WRONG DIRECTION, SO 16 REM LINE COUNTS HAVE TO BE VERY LARGE AND CAUSE AN OVERFLOW TO TRIGGER 17 REM MODULO VALUES TO BE ADDED. BE SURE TO CHECK THIS OUT CLOSELY IN EXAMPLE 20 POKE 53311,1 :REM SET MAGIC BIT TO ENABLE EXTENDED REGISTERS 100 POKE 54016,0 :REM DMA SOURCE LOW ADDRESS LOW 101 POKE 54017,4 :REM DMA SOURCE START ADDRESS MIDDLE 1024 SCREEN MEMORY 102 POKE 54018,64 :REM DMA SOURCE START HIGH AND LOCATION RAM (01) 103 POKE 54032,252 :REM SOURCE LINE LENGTH LOW (5 BYTES) 104 POKE 54033,255 :REM SOURCE LINE LENGTH HIGH 105 POKE 54028,36 :REM SOURCE MODULUS OF(40), SINCE WERE WORKING ON SCREEN MEM 106 POKE 54029,0 :REM SOURE MODULO HIGH 107 POKE 54022,1 :REM SOURCE STEP 1 108 POKE 54019,0 :REM DEST START ADDRESS 109 POKE 54020,4 :REM DEST MIDDLE START ADDRESS (SCREEN MEM) 110 POKE 54021,64 :REM DEST UPPER MEMORY ACCESS. 111 POKE 54034,252 :REM DEST LOWER LINE LENGTH 112 POKE 54035,255 :REM DEST UPPER LINE LENGTH 113 POKE 54030,36 :REM DEST MODULO 114 POKE 54024,1 :REM DEST STEP 1 115 POKE 54026,25 :REM DMA LENGTH LOW OF(5)LINES AT 5 BYTES..WILL HOSE BASIC 116 POKE 54027,0 :REM DMA LENGHT HIGH 117 POKE 54046,3 : REM ENABLE MODULO ON BOTH SOURCE AND DEST 200 GET B$ 201 IF B$ = "X" THEN 240 :REM DECREMENT 202 IF B$ = "Z" THEN 210 :REM INCREMENT 203 IF B$ = "Q" THEN 1000:REM QUIT 204 IF B$ = "W" THEN 260 :REM UP 205 IF B$ = "S" THEN 290 :REM DOWN 209 GOTO 200 210 A=A+1:IF A > 255 THEN A = 255 215 IF A < 0 THEN A = 0 220 POKE 54016,A :POKE54047,13:GOTO200:REM MOVE SOURCE AND TRIGGER DMA 240 A=A-1:IF A > 255 THEN A = 255 245 IF A < 0 THEN A = 0 250 POKE 54016,A :POKE54047,13:GOTO200:REM MOVE SOURCE AND TRIGGER DMA 260 A=A+40:IF A > 255 THEN A = 255 275 IF A < 0 THEN A = 0 280 POKE 54016,A :POKE54047,13:GOTO200:REM MOVE SOURCE AND TRIGGER DMA 290 A=A-40:IF A > 255 THEN A = 255 300 IF A < 0 THEN A = 0 310 POKE 54016,A :POKE54047,13:GOTO200:REM MOVE SOURCE AND TRIGGER DMA 1000 POKE 53308,0 :REM SET STANDARD ADDRESSING MODE
|
|
|
Post by Roland on Oct 7, 2005 14:23:56 GMT -5
Ahhhh...thank you...that helped a lot... ..but this was not the only thing that didn't work like described in the docviewer...right? What about the high-color-modes (especially using GBank A and B for: bmm=1, ecm=1, mcm=0).... Seemed like I always got an empty GBank B (although I had filled the memory with data...)
|
|
|
Post by Roland on Oct 8, 2005 5:58:22 GMT -5
hmmm....another question.... ...any chance to do a subtracting with the modulo??? problem is, that the source and destination registers are 24 bits (or at least 22), but the modula registers are only 16 bit. so, if I add #$ffff, it won't make a sub #$0001....
|
|
|
Post by Six on Oct 19, 2005 14:36:15 GMT -5
From what I can tell, the high-color modes don't work at all. Have you had any luck with linear multicolor?
|
|