Previous Thread
Next Thread
Print Thread
Page 3 of 5 1 2 3 4 5
Joined: Feb 2014
Posts: 852
Likes: 48
G
Senior Member
OP Online Content
Senior Member
G
Joined: Feb 2014
Posts: 852
Likes: 48
I think this driver needs more YOLO! 8-)

Since I'm on a roll, I added the 555 1second timer and it seems to work!

The driver is only running at 10% speed (on my system) so I made the resistance much lower (supposed to be 220K, set it to 20K otherwise I'd never see the end of the countdown).

Once it counts down, the car won't move forward (you can still turn it though).

Joined: Feb 2014
Posts: 852
Likes: 48
G
Senior Member
OP Online Content
Senior Member
G
Joined: Feb 2014
Posts: 852
Likes: 48
So I looked at the schematic over and over again, trying different things and I've come to the conclusion that the RESET1 D-Latch must depend on the horizontal position somehow, either through HBLANK or 512H.

RESET1 pulse ends when it clocks in a P on the data line. If this happens when 512H goes high, the car will appear in the middle of the screen.


Code
	TTL_7408_AND(Reset1Clock, VLd1_Q, 512H)  // clock the reset1 flipflop depending on 512H
	
	TTL_7474(A4_A, Reset1Clock.Q, P, A6_B.Q, P)
//	TTL_7474(A4_A, VLd1_Q, P, A6_B.Q, P)  // according to schematic
	ALIAS(RESET1_Q, A4_A.Q)
	ALIAS(RESET1,   A4_A.QQ)

	TTL_7400_NAND(A2_B, CAR1VIDEO, COMP_SYNC_Q)
	TTL_7408_AND(A6_B, START_Q, A2_B.Q)


If you think about it awhile (it just came to me), no additional gating necessary.

You can set the flipflop with PRESET_Q so just connecting 512H_Q up will set it and shut off the RESET1.


Code
	TTL_7474(A4_A, VLd1_Q, P, A6_B.Q, 512H_Q)




It's actually kind of interesting to study these early Atari arcade games like Lemans/Gran Trak 10 and Tank because you see the similarities between them and what came later in the 2600. The horizontal and vertical position and motion based on counters, here discrete logic does the counting for vertical and horizontal, whereas the 2600 had the cpu do the vertical counting, and the horizontal counting was done with a polynomial counter with an cpu supplied HMOVE offset.

Last edited by Golden Child; 07/02/22 05:17 PM.
1 member likes this: robcfg
Joined: Jan 2021
Posts: 101
=
Senior Member
Offline
Senior Member
=
Joined: Jan 2021
Posts: 101
Another exciting patent about composing complex graphics without framebuffer is US4383827 and DE3243574A1 about Nürburgring 3, the mythical arcade driving simulator by Reiner Foerst.

http://weltenschule.de/vgames/Nuerburg/Nuerburgring.html

If you are emulating such things, a specimen has apparently survived in the Computer Games Museum of Berlin.

[Linked Image from upload.wikimedia.org]

I am writing on a more detailed summary about the different Foerst hardware platforms. Nürburgring 1 & 2 were the predecessor of Atari "Night Driver" but had mostly analogue computers for car simulation, graphics and sound. Nürburgring 3 had more realistic colour graphics controlled by a Z80 MK3880 CPU but still used much analogue hardware for the simulator.

Foerst GmbH, Historie

According to patent DE3243574A1 the colour graphics works without framebuffer using gate logics with counters to draw the road etc., likely controlled by an eprom. Although this machine yet had no opponent cars, the graphics style of drawing a 3D road with center line and horizontally scrolling 2D backdrop (sky and mountains) had set the standard for games like Sega's "Turbo" (1981, which completely lacked car physics and switched curves as static still pictures) and the famous "Pole Position" (1982 by Namco, having car physics and proper curve motion).

Versions N4/N5 (1982,1983) were fully digital with improved arcade graphics featuring opposing traffic and better character generator. N6 (1986?) was likely for professional simulators only and had very awesome hardware based weather effects (apparently alpha channel) and hardware based area fill and circle segment drawing for a kind of zooming run-length encoded sprite graphics. N7 (1985, used in a serious forklift simulator) employed a custom built highend parallel computer with 3D polygon rendering hardware.

It is unknown how many Nürburgring arcade machines still exist. Apparently a "Nürburgring Power-Slide" (N3 P) stands in the Computerspielemuseum Berlin (computer games museum of Berlin, Germany). On flickr a person "videogamescgi1" uploaded detail photos of a "Nürburgring/1" (N1) including screenshot and PCB rack, those look fresh and suggest that it survived in collector's hands. With the early professional simulators it is hard to guess if some still rot in the cellars of some driving school because nobody seems to care. It would be exciting to emulate at least the graphics engine of the early models - and be it only for art purpose because they were way beyond its time.

Video Game Museum in Berlin (photo of Nürburgring 3 Power-Slide)

https://dewiki.de/Media/Datei:Video_Game_Museum_in_Berlin_(45946031421).jpg

The history of racing games
https://historyofracinggames.wordpress.com/installment-three/

Flickr videogamescgi1 (Nürburgring 1 photos)
https://www.flickr.com/photos/171062989@N03/with/49037010376/

Last edited by =CO=Windler; 07/03/22 03:07 AM.

MAY THE SOFTWARE BE WITH YOU!

{weltenschule.de}
Joined: Feb 2014
Posts: 852
Likes: 48
G
Senior Member
OP Online Content
Senior Member
G
Joined: Feb 2014
Posts: 852
Likes: 48
Interesting stuff, CO, I was watching the moving pictures until I realized that you can auto translate the German captions into English.

Too bad they had that "youth protection law".


==================

Back to the GT10:

I tried to put a POT (potentiometer) into the netlist, where there's supposed to be a pot to adjust the game timer.


There's a bunch of questions about pots that I don't quite understand:

I tried to use POT but that used three terminals, the POT2 only has two terminals.

You can specify a resistance:


POT2(R72, RES_K(10)) // should be a potentiometer 1M // lemans calls it R40 // Less resistance, faster count
POT2(R71, RES_K(60)) // lemans calls it R39 // should be 220K , we'll set to less because we want to see it count

and you can specify a dial setting:

PARAM(R72.DIAL,1.0)
PARAM(R71.DIAL,1.0)


and in the driver you have to specify an analog input:

NETLIST_ANALOG_INPUT(config, "maincpu:timer_pot1", "R71.DIAL");
NETLIST_ANALOG_INPUT(config, "maincpu:timer_pot2", "R72.DIAL");


and an input port:

PORT_START("POT_TIMER_1")
PORT_ADJUSTER( 1000, "Pot: Timer R71 Adjust" ) NETLIST_ANALOG_PORT_CHANGED("maincpu", "timer_pot1")
PORT_START("POT_TIMER_2")
PORT_ADJUSTER( 220, "Pot: Timer R72 Adjust" ) NETLIST_ANALOG_PORT_CHANGED("maincpu", "timer_pot2")


So I'm confused as to how the value given in the adjuster affects the POT2. Here I've given the one adjuster a value of 1000, and another a value of 220, how does that change the value, is it a percentage on scale of 0 to 100?

The dial setting in the param, is that an initial value?

==========================

I seem to be able to affect the pot value in-game make it count slower/faster, but the exact semantics are not quite understood.

============================

The UI not working properly with a slow netlist is getting problematic since half the time I can't even bring up the Sliders screen to change the values. Sometimes I can "kick it loose" by hitting ALT+ENTER to swap between full screen and window mode, but it still will hang up. (It will still respond to ALT+F4 and ALT+Enter). It seems like it won't respond to the up/down arrows until after a delay (like it needs the auto-repeat to kick in before it will see it). Does the input buffer get cleared before it can see the events or something?

I'm using Ubuntu, is this just a problem under linux?


one workaround I just figured out, put the netlist game into pause before bringing up the menu, then the menus work.

Joined: Jan 2021
Posts: 101
=
Senior Member
Offline
Senior Member
=
Joined: Jan 2021
Posts: 101
Originally Posted by Golden Child
Interesting stuff, CO, I was watching the moving pictures until I realized that you can auto translate the German captions into English.

Too bad they had that "youth protection law".

The last arcade videogame machine I saw in a German shopping center in Bremen was an Atari "Pole Position" cockpit at Horten that remained in operation likely until about 1992. But I also remember a Sega "Outrun" cockpit at Brinkmann that stood for few weeks in the computer department at the same time when they sold a PC with built-in Megadrive (looking like "Amstrad Mega PC" which was made 1993 - possibly rebranded as Compaq or such). It is unknown if there was a grace period for machines bought earlier or individual special approvals for non-violent games in some states of Germany.

The Nürburgring 3 graphics seems to be mostly described in the German language patent DE3243574A1 while the US patent is more general. The earlier Nürburgring 1 & 2 (which is mostly analogue without CPU) is described in patents US4077138, US4077138A. Unfortunately some of the old Foerst patents seem to be missing in online search. (I don't know if due to invention secrecy act if these included military simulators, but likely they were simply not scanned by Google when not found because these were expired anyway. The German ones tend to be OCR only, thus lacking illustrating drawings like schematics.)

There is a Foerst company history PDF (31MB huge) with plenty of fairly detailed info and many screenshots and newspaper articles of their historical arcade and professional driving simulators.

https://www.fahrsimulatoren.eu/images/pdf/Foerst-Firmenhistorie.pdf

Particularly the N6 graphics looks gorgeous. Unfortunately the screenshot dates seem partially messed up, and those dates in the youtube video got shuffled even worse and have nothing to do with the spoken text. Here is some additional driving simulator history:

Meet The Doctor-Engineer Who Basically Invented The Modern Racing Game
https://jalopnik.com/meet-the-doctor-engineer-who-basically-invented-the-mod-5906386

VW Invented First-Person Racing Video Games And They Don't Even Know It
https://jalopnik.com/vw-invented-first-person-racing-video-games-and-they-do-1671618942

Joined: Feb 2014
Posts: 852
Likes: 48
G
Senior Member
OP Online Content
Senior Member
G
Joined: Feb 2014
Posts: 852
Likes: 48
Stunt Cycle is very similar to Gran Trak in many ways, thought I'd fiddle a little.

Attaching a clock to the score up counter and hacking a "force start" button gets you from 8 to 27 buses: (don't know what's happening with the ramps on score = 12)



1 member likes this: exidyboy
Joined: Feb 2014
Posts: 852
Likes: 48
G
Senior Member
OP Online Content
Senior Member
G
Joined: Feb 2014
Posts: 852
Likes: 48
Still trying to figure out why it isn't displaying the bike properly, but it's doing something...




I also wanted to figure out how the images look like in the rom:

There's 16 lines * 4 bytes wide * 4 images * 2 (frames of animation for each image) = 512 bytes.

Each bike is 3 bytes wide, the fourth byte is an image of the bus.

The bike is on the ground, half wheelie, full wheelie and crash.

Code
   
f = io.open("/mnt/z/mame/roms/stuntcyc/004275.f1","r")
a = f:read("*a")
function prtbyte(adr,a) if adr then io.write(string.format("%x",adr)..":") end for i=7,0,-1 do if (a & (2^i)) ~= 0 then io.write(i) else io.write(" ") end end end
 for r=0,7 do do for i=0,15 do for b = 0,2 do prtbyte(nil,a:byte((i|(r<<6)|(b<<4))+1)) end print() end  end end
                        
                        
                        
                        
                        
       076              
       07               
       076    10        
        765  2 07       
        76543   76      
     2 0 65     765     
   4   0765432 07 54 2  
      1       10   4    
   4 2107654321   5 3 1 
        7               
    3 1            4 2  
                        
                        
                        
                        
      107               
      10    32          
      107  4  1         
      10765    076 4    
       07     1  6      
       07654 2  7 5 3   
     2 0    3           
   4   07  4     6 4    
      1  65             
   4 2107               
        7               
    3 1                 
                        
                        
                        
                7 5     
   43    654321 7       
  54    7    2 0 6 4    
  543  0  54 2          
    3210 6  3   7 5     
     21 7  4            
      10  5             
    3 1  6              
      107               
   4  1                 
     2  7               
   4                    
     2 0                
                        
                        
                        
   4                    
 6   2                  
   4                    
 6   2                  
   4                    
    32107               
    3    654            
    3    6  3    6 4    
     2    5432107       
      107654321  6  3   
           43210 65     
           43       3   
          543   7 5     
                        
                        
                        
                        
                        
       076              
       07               
       076    10        
        765  2 07       
        76543   76      
    3 1  65     765     
       0765432 07 5 3   
   4  1 7     10  54  1 
     2107654321     3   
   4              5   1 
     2 0            3   
                        
                        
                        
                        
      107               
      10    32          
      107  4  1         
      10765    07 5     
       0      1 76  3   
       07654 2    5     
    3 1     3   7   3   
       0   4      5     
   4  1 765             
     2107               
   4                    
     2 0                
                        
                        
                        
                 6      
   43    65432107  4    
  54    7    2   6      
  543  0  54 2 0   4    
    3210 6  3    6      
     21 7  4            
      10  5             
     2 0 6              
   4  10                
      1 7               
   4 2                  
        7               
    3 1                 
         6 4            
       0    3           
       0  5 3           
       0  5 3           
        7 5432107       
          5432107       
          5432  7       
          5  2          
          5  2          
          5  2          
           4 2          
        7 543           
       0  54            
       0 6 4            
       0   4            
        7 5             
>  for r=0,7 do do for i=0,15 do for b = 3,3 do prtbyte(nil,a:byte((i|(r<<6)|(b<<4))+1)) end print() end  end end
        
        
        
        
        
        
        
        
  5432  
 6    1 
 6    1 
 654321 
 654321 
 6 43 1 
 654321 
 6    1 
        
        
        
        
        
        
        
        
  5432  
 6    1 
 6    1 
 654321 
 654321 
 654321 
 654321 
 6    1 

        
        
        
        
        
        

Joined: Feb 2014
Posts: 852
Likes: 48
G
Senior Member
OP Online Content
Senior Member
G
Joined: Feb 2014
Posts: 852
Likes: 48
Okay, got the bike looking normal, still falling...




Don't know if this is right, but JD left a clue, saying that it could be DIRECTION_Q and it didn't look right until I used DIRECTION_Q.

Code
	TTL_7402_NOR(D4_3, DIRECTION_Q, H6)   // Schematic says DIRECTION, maybe DIRECTION_Q?
	TTL_7408_AND(B5_1, DIRECTION_Q, H5_AND_H6) // Schematic says DIRECTION, maybe DIRECTION_Q?
	TTL_7402_NOR(D4_4, D4_3.Q, B5_1.Q)

	TTL_7400_NAND(H2_1, HSYNC_Q, D4_4.Q)
	TTL_7400_NAND(H2_2, HSYNC_Q, H5)

   //"TTL_9322","+SELECT,+A1,+B1,+A2,+B2,+A3,+B3,+A4,+B4,+STROBE,@VCC,@GND")
	TTL_9322(J1, HSYNC, V4, P, V3, 4V, V2, 2V, V1, 1V, GROUND)

// 1V is from the VERTICAL COUNT registers (screen, used for bus images, read during hsync)
// V1 is from the VERTICAL MOTION registers (relative to the start of the cycle)

//  PROM_82S115(name, CE1Q, CE2, A0, A1, A2, A3, A4, A5, A6, A7, A8, STROBE)
	PROM_82S115(hf1, GROUND, P, A0, A1, A2, A3, A4, A5, A6, A7, A8, P)

	// 9 bits of rom addressing, 512 bytes
	ALIAS (A0, J1.Y4)  // image row number 0..15
	ALIAS (A1, J1.Y3)  
	ALIAS (A2, J1.Y2)
	ALIAS (A3, J1.Y1)
	ALIAS (A4, H2_2.Q)  // horiz byte number  0..3  (0-2 = bike 3 = bus)
	ALIAS (A5, H2_1.Q)  
	ALIAS (A6, R2)  // image number 0..3 (cycle angle)
	ALIAS (A7, R3)
	ALIAS (A8, R4)  // animation frame 0..1
	
	// R2 and R3 are CYCLE ANGLE CONTROL
	//
	// R2  R3
	//  0   0  both wheels on the road
	//  1   0  half wheelie   (held to a half wheelie while jumping)
	//  0   1  full wheelie
	//  1   1  crash / flipped position
	// depends on the throttle

Joined: Feb 2014
Posts: 852
Likes: 48
G
Senior Member
OP Online Content
Senior Member
G
Joined: Feb 2014
Posts: 852
Likes: 48
Got the bike moving a little, found that the 9602 wasn't hooked up completely, causing the CYCLE_RESET signal not to fire.


NET_C(N6.16, VCC) // missing hookups to VCC and ground
NET_C(N6.8, GND)

Still some weirdness with horizontal counters, cant seem to move bike leftward.


Joined: May 2009
Posts: 2,048
Likes: 85
J
Very Senior Member
Offline
Very Senior Member
J
Joined: May 2009
Posts: 2,048
Likes: 85
I guess Evel Knievel isn't being paid enough to actually jump the buses. smile

Page 3 of 5 1 2 3 4 5

Link Copied to Clipboard
Who's Online Now
3 members (Duke, Darkstar, Richard Bannister), 22 guests, and 3 robots.
Key: Admin, Global Mod, Mod
ShoutChat
Comment Guidelines: Do post respectful and insightful comments. Don't flame, hate, spam.
Forum Statistics
Forums9
Topics9,100
Posts119,237
Members5,019
Most Online890
Jan 17th, 2020
Our Sponsor
These forums are sponsored by Superior Solitaire, an ad-free card game collection for macOS and iOS. Download it today!

Superior Solitaire
Forum hosted by www.retrogamesformac.com