Jump to content

Just Jeff

Members
  • Posts

    597
  • Joined

  • Last visited

Everything posted by Just Jeff

  1. Good Evening.. Could someone please explain this? I don't understand the behavior of GRP1 here (above the words "Space Taxi"). I write $1 to it and P0 for troubleshooting. (I would normally write zero). But on the TIA tab, you can see $F0 stays in the VDEL line of GRP1. Then you can see TIA writes the $1, then $F0, then $1 again. What's up with that?
  2. Thanks! It looks like that saves me 5 cycles.. Does this look right? stx ScratchRAMX ; 3 3 Borrow the x register for register offset sty ScratchRAMY ; 3 6 Borrow the y register for data table offset ; Test to see if there are any register changes on this line ldy SIIndex ; 3 9 y is the data table offset lda SILineNum,y ; 4 13 ; lda ScanLine ; cmp ScanLine ; 3 16 See if it matches the stored next line to be changed ; The first one of these will have to be seeded before the kernel bne NoChanges ; 2,3 18,19 If not skip over the change routine ; if this line has a register change ; 8 ldx SIRegister,y ; 4 22 x is an offset that matches registers (0,x) lda SIValue,y ; 4 26 load the value that will go in the register sta $0,x ; 4 30 store the operand in the register ; Now update where for next change will happen ;lda SINext,y ; Load the next line number that will receive an update ;sta SILineNumRAM ; Store it where it will be compared to Scanline later inc SIIndexRAM ; 5 35 This will be the next table offset. ldx ScratchRAMX ; 3 38 Restore the x register ldy ScratchRAMY ; 3 41 Restore the y register NoChanges: ;SLEEP 30something
  3. For horizontal positioning, if your object is too far to the right (very late timing), the WSYNC will happen after the beam has hit the next line already, causing it to add a line. But you can see that your background colors stay stable, so I don't think that is it. Your vertical size of your sprites is changing. Check your immediate loads. At some points, you have SBC $03 which is the RSYNC register. Likely you meant SBC #03. You may have others. Also, not that it will cause an error, your are loading the accumulator with the same value that is already in it a lot.
  4. Could I have done something leaner? Here's what I came up with so far and its a lot bigger that I thought it would be- I managed to blow up ZackAttack's code into 46 cycles to update only one register. I think it will fit because I can break it up a bit. Note: I start with 53 cycles of SLEEPs and 28 additional cycles wasted by a WSYNC and a BNE for the loop. (over the course of two lines.) My goal was to have the band highly reusable while replacing some NOPS, and have the smallest tables I could. I think it will do that. Here's a table with a few example values: SpecialInstructions: ;The first line to be changed needs to be seeded. SIRegister: ; Specify which register will be updated .byte HMP1, COLUP0, GRP0, ENABL SIValue: ; The value to be placed in the register .byte 0, YELLOW, %10101010, $02 SINext: ; The line number where the next register will be updated ; (Compared to a Decrementing ScanLine) .byte 131 .byte 110 .byte 108 And here's the code: ; Test to see if there are any register changes on this line lda ScanLine ; 3 3 See what scan line we're on cmp SILineNumRAM ; 3 6 See if it matches the stored next line to be changed ; The first one of these will have to be seeded before the kernel bne NoChanges ; 2,3 8,9 If not skip over the change routine ; if this line has a register change ; 8 stx ScratchRAMX ; 3 11 Borrow the x register for register offset sty ScratchRAMY ; 3 14 Borrow the y register for data table offset ldy SIIndexRAM ; 3 16 y is the data table offset ldx SIRegister,y ; 4 20 x is an offset that matches registers (0,x) lda SIValue,y ; 4 24 load the value that will go in the register sta $0,x ; 4 28 store the value in the register ; Now update where next change will happen lda SINext,y ; 4 32 Load the next line number that will receive an update sta SILineNumRAM ; 3 35 Store it where it will be compared to Scanline later inc SIIndexRAM ; 5 40 This will be the next table offset (y). ldx ScratchRAMX ; 3 43 Restore the x register ldy ScratchRAMY ; 3 46 Restore the y register NoChanges: ;SLEEP 30something
  5. Well its a free tool and I won't complain. I'll remember to force the word eventually..
  6. I think this might satisfy most of what I was aiming for. I think I would have to add some more code that checks what scan line I'm on and if there are any updates for it. Thanks!
  7. Interesting. I suppose then I would just jsr to RAM, then rts back..
  8. Good Morning.. Is there a way to run op codes from RAM? I have a kernel band with some slack time, it would be nice to re-use it more by say- storing an op code and operand in RAM that will either change an HMMx, or COLUx, etc and somehow run it. Right now, the best thing I can think of for making the band flexible, is a jmp.ind using a pointer in RAM but I'm trying to find out if there is anything quicker. (I I also think this might force me to create giant jump tables with mostly nothing in them if I don't have a lot of things to do. Thanks!
  9. Yeah its a little counter-intuitive. We were, after all, writing the 6502 code properly at that point.
  10. Thank you... What is this doing? I've never seen that syntax.
  11. OK. Thanks.. That does RESP0, but strangely, it stores in the same exact horizontal position as when I use RESP0. I wonder why it doesn't move to the right at all.
  12. I'm trying to waste 1 cycle here for an in-kernel RESM1 by changing a zero page store to an absolute: ;sta RESM1 ; 3 Change to 4 cycle store sta $1300 ; 4 Wasting a cycle to delay missile 1 What am I doing wrong? Leaving the store out entirely has the same effect as the absolute store, so I think the memory address might be wrong.
  13. The Goldbergs is on right now -its about Atari's ET
  14. Two more questions.. How many lines of playfield will make a square? In other words, a PF pixel is 4 clocks wide but it looks like it might take 5 scan lines to make a square with that- is that the closest? And a related question, when using objects to draw lines, what's a good way to make a 45 degree line? Right now I'm using object speeds of -1 and 1 in a one line kernel, and it looks like its closer to a 30 degree line. Would using an HMOVE every other line instead of every line make it closer to 45 degrees or would that just make the line too vertical?
  15. Thanks Everybody! I've been digesting all of this slowly. Surely, I'll have questions soon..
  16. Good Afternoon, I'd like to do some RESPx, RESMx, RESBLs inside the kernel. Does anyone know of a chart or detailed description of which of the 76 cycle counts correspond to which pixel positions along the 160 possible pixel positions? For example, something that tells me if I RESBL at cycle 50 through 65, it puts the ball at pixel 140 or 150 or wherever.
  17. I tested some voltages and got numbers that look strange to me. On the back of that power switch I got 13.1 on the one that comes from the power supply and then I got 3.2 on the other 2, then 4 on those when I went back to double check. Are they right? I would expect 9 from the power supply and maybe 5 for the other two.(marked up pic attached) Top yellow arrow is the power supply, bottom yellow arrow is what I think is a ground, red circle is the power switch with voltages.
  18. Good Morning, I've had this broken 2600 Jr sitting around here for a while and figured its about time to see if I can get it back up and running. Basically, when I turn it on, the red LED lights up and that's it. When I bought it abut 6 years ago, it wasn't working, but a little clean up with alcohol and sandpaper did get it running. I then attempted a composite mod shown here: http://atariage.com/howto/composite.html and it promptly stopped working again. Does anybody have any troubleshooting advice? Also, here's a close up of the area where I attempted the mod, then removed it. Note I'm not very good at soldering. One other detail, when I press down on the power switch, the LED will sometimes dim or even go out.
  19. So I'm curious how this works.. Is there a little bit of extra hardware in the cartridge that "listens" in on those addresses and then directs the bus to a bank? Perhaps a simple set of transistors turned high by the read? (I'm not an electronics whiz)
  20. Apparently I tried doing a jsr to it at some point. If I remove that, it at least makes noise. If it is just 4 bit samples, I suspect my sample rate and length don't match.. Shining2.asm
  21. Thanks.. Still having a tough time with this. Its in my source, and it compiles. But there's still something wrong and it doesn't run. When it loads in JEdit, I get: C:\Atari\dasm\Shining.bin: The file could not be loaded correctly (some data might be lost) with the encoding "Cp1252". (java.nio.charset.UnmappableCharacterException: Input length = 1) Try selecting a different encoding. It can be selected with the menu File->Reload with Encoding. If you want it to be done automatically, add the candidates into "List of fallback encodings" in Encodings pane of Global Options. and Stella's disassembly doesn't look so good. Is the .pds supposed to be just 4 bit sample data or is there more to it? [edit: I added the .asm] Shining.asm
  22. Thanks.. I'm glad I asked. I was thinking it was a compile issue. Looking at GameStateHi and GameStateLow,some of values were put in with commas and the $F06E and $F072 are actually the GameStateHi and GameStateLo values again. Same issue I guess. It looks like the op codes at least still line up though though I guess you have to focus more on them when troubleshooting.
  23. Good Morning, Does DASM ever legitimately re-arrange code? Here, GameStateLo is where things start going wrong. Does anyone know why this happens?
  24. OK.. I was getting that. I thought that was it telling me I wasn't giving it what it expected. Though I don't see any result from running it.
×
×
  • Create New...