Jump to content

rsh

New Members
  • Content Count

    12
  • Joined

  • Last visited

Posts posted by rsh


  1. 2 hours ago, MrFish said:

    There's also this Atari BASIC machine language subroutine that was published in Compute magazine. It doesn't include the source code, but it could be disassembled easily enough.

     

    1952003514_Access-130XEMemory(1).thumb.png.a695e401a3183e18428568b4e390b7a1.png1361880363_Access-130XEMemory(2).thumb.png.b871e6c2171843acec0108758143e914.png

     

    Access - 130XE Banked RAM.txt 9.24 kB · 2 downloads

     

    Nice!  This is cool it says you access all 65K without having to worry about the 16K bank limit.   I wonder if it will split read/write across banks as well.   Can I shove that in to ACTION! lol not sure but seems to be very clean.  Thanks!


  2. 1 hour ago, rsh said:

    Yep PORTB magic! ... I would be interested in looking at that same basic program as well.  Do you remember what/where I could get it.  I found a page but can't seem to find the full code behind it.

    I found it https://archive.org/details/1985-11-anticmagazine/page/n55/mode/2up   

    In the text of the mag.  Interesting thing is it seems to be switching modes as well as banks.  Not sure why it does this yet (see below). 

     

    There are 4 modes to toggle for extended Ram.  I'm thinking the "extend" command in Basic XE put's you in: "CPU extended RAM mode" and automatically moves your program in to secondary bank area.

     (referenced modes here https://www.atariarchives.org/mapping/appendix16.php )

        MODE                BANK
    No. 6502   ANTIC        No.    Address
    0   Extd   Extd         0      $0000-$3FFF
    1   Main   Exd          1      $4000-$7FFF  
    2   Extd   Main         2      $8000-$BFFF
    3   Main   Main         3      $C000-$FFFF
    POKE 54017, 193 + (MODE * 16) + (BANK * 4)     

    The above program is doing this:

     

    Bank 0 or (1 in program):  POKE 54017, 193 + (1 * 16) + (0 *4) = POKE 54017, 209          Mode (extd/extd)

    Bank 1 or (2 in program): POKE 54017, 193 + (1 * 16) + (1 *4) = POKE 54017, 213               "

    Bank 2 or (3 in program):  POKE 54017, 193 + (1 * 16) + (2 *4) =  POKE 54017, 217              "  

    Bank 3 or (Main in program):  POKE 54017, 193 + (3 * 16) + (3 *4)   = POKE 54017, 253    Mode (main/main)

     

    I believe Basic XE uses this mode:  Poke 54017,193   (to start, the move and bput/bget commands must set the Bank and buffer bank data for read/write)

    1   Main   Exd          1      $4000-$7FFF  CPU extended RAM mode

     

    The question now is which mode to pick for ACTION! ..  I will try and copy Basic XE's mode and usage and maybe implement the video extended RAM mode (this is like a giant video ram disk)

    both would solve my problem. 

     

     


  3. 2 hours ago, 576XE said:

    I've never programmed in Action! But I understand it's reasons etc.

    As far as it's concerned EXTMEM, may be this code can help you someway...

    !====================================!
    ! BANKS.PRG                          !
    !   Using 130XE Extended Banks in    !
    !     PL65 Programming Language      !
    !------------------------------------!
    ! Evgeny Zolotarev,(aka 576XE), 2020 !
    !====================================!
    INCLUDE TERMINAL.LIB
    
    !- CONSTANTS & VARIABLES:
    CONST bkMask=%10010001
    BYTE PORTB=$D301,NMIEN=$D40E,bkTag
    INT bkNum
    
    !- DUMMY array representing ---------!
    !- selected BANK's slice ------------!
    BYTE bkMem[$4000]=$4000
    
    !- Bank Selector Values -------------!
    !- Atari800WinPlus 576XE ------------!
    BYTE bkSel[33]
    DATA $93,
      $81,$83,$85,$87,$89,$8B,$8D,$8F,
      $A1,$A3,$A5,$A7,$A9,$AB,$AD,$AF,
      $C1,$C3,$C5,$C7,$C9,$CB,$CD,$CF,
      $E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF;
    
    !- Bank Selector Values -------------!
    !- Altirra 576XE Compy scheme -------!
    ! BYTE bkSel[33]
    ! DATA $33,
    !      $21,$23,$25,$27,$29,$2B,$2D,$2F,
    !      $61,$63,$65,$67,$69,$6B,$6D,$6F,
    !      $A1,$A3,$A5,$A7,$A9,$AB,$AD,$AF,
    !      $E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF;
    
    ! String VAR  to store in all BANKS
    STRING inp$[4+27]
      DATA " => User DATA from Bank #00";
    
    ! Set string as VAR for appending
    STRING out$[4+27]
      DATA "                           ";
    
    !- PROCEDURES:
    !- Clear Screen Procedure -----------!
    PROC clrScr()
      CONST clr=255
    BEGIN WRTSTR(CHR$(125)) END
    
    !- Wait for Any Key Pressed ---------!
    PROC anyKey()
      CONST none=255
      BYTE CH=764
    BEGIN
      WRTSTR("Wait for a Key...") CR()
      WHILE CH=none DO ENDWHILE
      CH=none
    END
    
    !- Place bkSel Tags into PORTB ------!
    PROC setBk*(BYTE bkTag)
    BEGIN
    !- Wrapper STOPs/STARTs IRQ & NMI ---!
      SEI LDA #$00 STA NMIEN
      LDA PORTB
      AND bkMask OR bkTag
      STA PORTB
      LDA #$40 STA NMIEN CLI
    END
    
    !- Send bkNum to setBk subroutine ---!
    PROC setBank(INT bkNum)
    BEGIN
      bkTag=bkSel[bkNum]
      setBk*(bkTag)
    END
    
    !- Writes to Bank -------------------!
    PROC writBk()
    BEGIN
      FOR bkNum=0 TO 32 DO
        WRTSTR("Writing to BANK #") WRITE(bkNum) CR()
        IF bkNum<10 THEN
          inp$[25,25]=STR$(0) inp$[26,26]=STR$(bkNum)
        ELSE inp$[25]=STR$(bkNum) ENDIF
        out$=inp$
        setBank(bkNum)
        MOVE(.out,LEN(out$),.bkMem)
      NEXT
    END
    
    !- Reads from Bank ------------------!
    PROC readBk()
    BEGIN
      FOR bkNum=0 TO 32 DO
        WRTSTR("Reading BANK #") WRITE(bkNum) CR()
        setBank(bkNum)
        MOVE(.bkMem,LEN(out$),.out)
        WRTSTR(out$) CR()
      NEXT
    END
    
    !------------------------------------!
    MAIN()
      BYTE PORT
    BEGIN
      LDA PORTB STA PORT
      clrScr() anyKey() writBk()
      anyKey() clrScr() readBk()
      LDA PORT  STA PORTB
    END
    ! >>> EOF <<< !

     

    Holy Smokes this might be exactly what I need.    If I can get this to work...  I will see about creating those copy lib calls like Basic XE.   Thank you this is another good place to start! appreciate it!

    • Like 1

  4. 19 hours ago, Dmitry said:

     

    I'm probably not helping, because i cannot specifically answer your question.  But as it happens, I typed in the Ian Chadwick Demo for accessing Antic 130xe extended memory just a few days ago..over Christmas break.  It uses regular Atari Basic.  It was kind of fun, that is, typing from a magazine again.

     

    In my case, i was examining the Basic, to implement what I needed to do in Assembler.  And I found that I just had to look at the code, it was obvious enough from the demo how it works.  Which, I cannot say the same from reading the article.

    I found the article to be completely incomprehensible, I think it really misdirected by talking about logical addresses that have no importance at all - it just seems to me that was the writing style in the 1980s.   I finally just had to ignore the article.  But the code is clear, poke portb give the cpu access to the bank, write your data.  Poke portb again, give antic access to read the written data, addressing never changes, just the active bank.

     

    And I even found another article, that basically said don't try to use extended ram, unless you have Basic XE!  Wow!  It's no wonder it didn't catch on more, those magazine articles were highly influential.

     

     

     

    Yep PORTB magic! ... I would be interested in looking at that same basic program as well.  Do you remember what/where I could get it.  I found a page but can't seem to find the full code behind it.


  5. On 8/5/2020 at 11:32 PM, dmsc said:

    Hi!

     

    The idea is simple: use the COLRSH O.S. variable to count the current line, so that each DLI is:

    DLI:
      ' Save Registers
      PHA
      TXA
      PHA
      ' Read current counter and sync
      LDX COLRSH
      STX WSYNC
      ' Read from table and store color
      LDA table,X
      STA COLBK
    
      ' Increment counter for next DLI
      INC COLRSH
      ' Exit DLI
      PLA
      TAX
      PLA
      RTI
    

     

    The standard OS will clear COLRSH to 0 on each vertical blank, even when the critical flag is set, whenever the attract mode is skipped.

     

    Have Fun!

     

    I have messed around with this more, not sure I understand the mechanics yet...   How do we tie the line of the DLI to the player position?   I guess we are using player 2 to multiplex over the other players and change the color in the process. where does the move player2 and color change occur in the DLI?  


  6. 11 hours ago, dmsc said:

    Hi!

     

    The idea is simple: use the COLRSH O.S. variable to count the current line, so that each DLI is:

    DLI:
      ' Save Registers
      PHA
      TXA
      PHA
      ' Read current counter and sync
      LDX COLRSH
      STX WSYNC
      ' Read from table and store color
      LDA table,X
      STA COLBK
    
      ' Increment counter for next DLI
      INC COLRSH
      ' Exit DLI
      PLA
      TAX
      PLA
      RTI
    

     

    The standard OS will clear COLRSH to 0 on each vertical blank, even when the critical flag is set, whenever the attract mode is skipped.

     

    Have Fun!

     

    Thank you very much.  I will see if I can get this to work. 


  7. This is really cool setup.  I'm looking for something simple like this for Action! to add color to players.  Everything I've run across requires a VBI and seems very complex... where you don't use one.  Do you have an example in Action!  Any suggestions.  I'm not currently familiar will basic.syn syntax to convert these to raw asm or Action!


  8. On 8/13/2011 at 12:20 PM, peteym5 said:

    I have been experimenting with player/missile graphics multiplexers to get more sprites on the screen. I manage to get 10 multicolor ones at 20 pixels tall just using players so they can only be 8 pixels wide. I did include setting the player double width and quad width for certain sprites. These may be use for a potential future game. I went through and drawn up some mythical monsters like Dragons, Spiders, Bats, Unicorns, Pegasus, Griffins, etc. I am consider making something that goes room by room (like 2600 adventure or NES Zelda) using Antic 4 mode for the walls and stuff in the rooms. I would like to build something original.

    mc_spritedemo.zip 5.89 kB · 270 downloads

    This is so Fantastic! Truly amazing! well done!  I'm still a little lost on the mechanics.  I want to do this in Action!  but I am a little stumped.  Does anyone have some simple code that does one sprite and couple colors.  Is it limited to graphics mode?    This should be utility library.  I find it amazing that even OSS back when Action! came out.  They did not provide some of the cool powerful routines from the already created assembler (written by OSS) from Basic XE (for example rget and print using) great tools.  Back then everyone did everything from scratch over and over again. 


  9. On 6/8/2020 at 10:24 PM, phaeron said:

    This is a bit strange. You might notice slightly more latency than A8WP but it shouldn't be that bad, and it sounds like something is causing the emulator to bog down. Enable View > Show FPS and make sure you're hitting 60 (may bounce around 59-61 but shouldn't be significantly below that), and check that GPU usage isn't spiking in Task Manager. Altirra's default configuration should be lean on the GPU usage but enabling some options like high artifacting can be bit heavier.

     

    Custom devices can interface to a local network server but don't currently have the ability to access the full memory map, they can only affect their own local device memory. I've thought about the possibility of an automation profile that can access the full address space but it is not currently implemented.

    Thank you for the response. I did some testing and restarting Altirria and resetting the config. I got it to work much better, but still does not seem as responsive as WinPlus.  Altirria my have some leak that can slow usb device input down.


  10. Thank you for version 3.20... truly amazing!!!

     

    Mouse and Paddle emulate.  I noticed using a mouse as a paddle is not playable as there major delays and is jerky.  To give an example compare it with Atari800winPLus.  The difference is stunning.

    Try running Kaboom!.bin and you will see what I mean.  Atari800WinPlus is smooth as glass. 

     

    Not sure if this is in the paddle or the mouse it's self.  I noticed using actual atari 2600 paddles it behaves the almost the exact same as with mouse input in Altirra.  Unfortunately, Atari800WinPlus does not support a

    paddle input for comparison...   I'm using the 2600 Daptor D9 for the paddle input to windows 10.  I don't think it's the Daptor causing delay since the mouse acts the same, there is a issue with

    the paddle input response routines.  

     

    I have not tired this on windows 7.  Has anyone else noticed this or fixed the problem. 

×
×
  • Create New...