I partially disassembled the POP rom a while ago in order to hack it into a menu for the "Menu Driven Mega Cart" designed by Edwin Blink.
The POP is slightly different compared to a standard 2600 and that's why the rom doesn't do much in Stella and other 2600 emulators (technically it's not a rom for the Atari 2600!)
Here are a few notes (from the source that you can find in this post):
; VCS POP (Point Of Purchase) KIOSK hardware notes
; Memory map has a few differences from the standard VCS one:
; TIA mirrors in $x800-$xFFF area don't exist in the VCS POP.
; any address in the $x800-$xFFF (x=even value) area maps to dip
; switch A7 (READ - 4 bits in low nybble) and Rom select latch (WRITE - 6 bits).
; RIOT mirrors in $x800-$xFFF area DO exist, but cannot be used because they would cause
; bus contention with dip switch/ rom select latch
; 5|4|3|2|1|0| | | | | | | | | |
; $0000-$003F = TIA $00-$3F mirrors: - - - 0 0 - - - 0 - x x x x x x
; $0080-$00FF = RIOT RAM $00-$7F mirrors: - - - 0 - - 0 - 1 x x x x x x x
; $0280-$029F = RIOT $00-$1F mirrors: - - - 0 - - 1 - 1 - - x x x x x
; $0800 = ROM LATCH (WRITE) / mirrors: - - - 0 1 - - - - - - - - - - -
; DIP SWITCH A7 (READ)
; $1000-$1FFF = ROM mirrors: - - - 1 x x x x x x x x x x x x
; x = used as address bit
; - = don't care
; No LDIF, RDIF, TVTYPE, SELECT or RESET physical switches.
; LDIF and RDIF bits hardwired to GND (B position).
; RESET bit goes low for a while after a ROM is selected.
; There are 2 pushbuttons to select the game number (ONES and TENS) and a START button
; These 3 buttons are wired to the 3 unused (on the VCS) pins of RIOT PORTB
; A timer circuit resets the POP VCS after a while. Duration (infinite play is also possible)
; is set by 4-dipswitch bank A8.
; Pressing any of the START, ONES or TENS buttons cause the timer to reset
; 2 joysticks and 2 paddles (INPT0 -INPT1) hardwired
; Rom select latch:
; 6 bits used : bit 0,1 -> COL 0-3
; bit 2 -> ROMSEL2
; bit 3,4,5 -> ROW 0-5
; 48 roms max supported ($00 - $2F). rom $00 is the menu itself
; A standard 2600 cart port is present on the board but cannot be accessed with the board
; mounted inside the cabinet. The port is wired in parallel with rom #7. To use it, the rom
; in that position must be removed, then the cart can be accessed by selecting game 7 on
; the menu.
; Dip switch A7:
; 4 bits = number of free upper rom slots (0-15)
I have finally read an Atari rom properly! It does not match the Atari VCS Point-of-Purchase ROM (1982).bin above perfectly. In the above rom memory location 0390 contains 0F. In my rom, location 0390 contains 07.
That byte affects the max game number displayed in the menu that can be configured using the dipswitches marked "A7" on the board:
the known rom allows values from 32 to 47, while the one you dumped from 40 to 47 (basically it ignores the position of one of the switches).
Here's the relevant code:
LDA DIPSW_A7 ;4
AND #$0F ;2 <------------------ AND #$07 in the alternate dump!
STA temp0 ;3
LDA #$2F ;2 max number of games = 48
SBC temp0 ;3
LDX #$00 ;2
LF39A: ; divide by ten to convert to BCD
SBC #$0A ;2
BMI LF3A3 ;2
JMP LF39A ;3
ADC #$0B ;2 add 1 to low BCD digit
STA max_rom_BCD_LO ;3 Lo BCD digit
INX ;2 add 1 to high BCD digit
STX max_rom_BCD_HI ;3 HI BCD digit
Edited by alex_79, Sun Apr 15, 2018 10:02 AM.