Jump to content

khryssun

Members
  • Content Count

    810
  • Joined

  • Last visited

Posts posted by khryssun


  1. looking at my last post' date=' it seems more like I was posting my resume sorry then answering your question :D . The people at work think I am crazy to want to learn to program assembly especially since I am the creative director ;) As an artist the Atari just seems like such fertile ground it is too enticing to pass up, though i must admit I am really out of my comfort zone this deep in the machine language. Guess it just takes time![/quote']

     

    Hi,

    well, learning machine language (ML) is not as complicated as it seems... in fact, I consider it like a game : playing with the CPU and telling it to make what we want is really fun... :wink:

     

    BTW : (Assembler is an improper term for this as it refers to the program that convert the machine laguage opcodes (LDA, STA, TXA...) of the source file (text) to a binary executable file understandable by the 6502/6510)... and it's this file created by the assembler that can be run on a computer using one of these microprocessors.)

     

    As I said before, ML is easy in it's mechanisms : indeed, it's just playing with the instructions of the microprocessor.

    Most of the operations are very basic : Load a value into a register, transfer a register's value into a memory address, transfer the value of one register to another, jump the program execution to another address regarding some conditions (or not), call a subroutine...

     

    I'm very simplist but the things are not much more very complicated.

     

    Personnaly I learnt ML when I had a Commodore 64. I had a book where all about the 6502/6510' programming was very, very well explained : it was the "Commodore 64 Programmer's Reference Guide"

     

    If you are interrested, you can find the text version of the book here :

    http://project64.c64.org/hw/c64prg10.zip

     

    Forget all chapters about the C64, and jump directly to the Chapter 5 (page 209) : BASIC TO MACHINE LANGUAGE.

     

    Everything you'll need is here :

     

    - What is Machine laguage

    - The registers of the 6510

    - Hexadecimal notation

    - Addressing modes

    - The zero page

    - The stack

    - Indexing

    - Branches and Testing

    - Subroutines

    - All Microprocessor instructions explained (with cycles)

     

    Hope this'll help ;)

     

    take care,

    chris


  2. Andrew Davie wrote

    [2] Instead of using the scanline to write the shape of the sprite, load the shape from a table. Can you think how it would be possible to draw (say) a mario-shaped sprite anywhere on the screen? This is tricky, so we'll devote a session or more to vertical positioning.

     

    Well, it's not Mario, but he's famous ;)

     

    Player0_Pac_Man.jpg

     

    
    
                  processor 6502 
    
                  include "vcs.h" 
    
                  include "macro.h" 
    
                   
    ;-------------------------------------------------------------
    ;-                    Start of code here                     -
    ;-------------------------------------------------------------
    
    
    
                  SEG 
    
                  ORG $F000 
    
    
    
    Reset 
    
    
    ;-------------------------------------------------------------
    ;-   Clear RAM, TIA registers and Set Stack Pointer to #$FF  -         
    ;-------------------------------------------------------------
    
           
    
                  SEI
    
                  CLD	
    
                  LDX #$FF
    
                  TXS
    
                  LDA #0
    
    Clear_Mem
    
                  STA 0,X
    
                  DEX
    
                  BNE Clear_Mem	
    
    
    
                  LDA #$80        ; Blue
    
                  STA COLUBK      ; Background Color
    
                  LDA #$1E        ; Yellow     
    
                  STA COLUP0      ; Player 0 Color
    
     
    ;-------------------------------------------------------------
    ;-                    Start to Build Frame                   -
    ;-------------------------------------------------------------    
    
    
    
    Start_Frame 
    
    
    
            
    
         ; Start of Vertical Blank 
    
    
    
                  LDA #2 
    
                  STA VSYNC 
    
    
    
                  STA WSYNC 
    
                  STA WSYNC 
    
                  STA WSYNC        ; 3 scanlines of VSYNC
    
    
    
                  LDA #0 
    
                  STA VSYNC            
    
                   
    
          
    
         ; Start of Vertival Blank
    
         ; Count 37 Scanlines
    
    
    
                  LDA  #43         ; 2 cycles
    
                  STA  TIM64T      ; 3 cycles
    
    
    ;>>>> Free space for code starts here : 2793 cycles Free
    
                  
    
                  
    
          
    ;>>>> Free space for code ends here
    
    
    
    Wait_VBLANK_End
    
                  LDA INTIM                ; 3 cycles
    
                  BNE Wait_VBLANK_End      ; 3 cycles
    
                  STA WSYNC        ;3 cycles  Total Amount = 19 cycles
    
                                   ; 2812-19 = 2793; 2793/64 = 43.64 (TIM64T)
    
    
    
                  LDA #0 
    
                  STA VBLANK      ; Enable TIA Output
    
                                   
    
         
    
         ; Display 192 Scanlines with Player 0
    
           	
    
                  SLEEP 36         ; Player X = +/- Middle Screen
    
                  STA RESP0        ; Set Player 0 (X)  
    
                  LDY #192         ; 192 Scanlines
    
                  LDX #0
    
    Picture  
    
                  CPY #110         ; Position Y reached ?
    
                  BPL No_Drawing   ; No = Continue
    
                  CPX #14          ; 14 Lines of Sprite Datas Drawn ?
    
                  BEQ No_Drawing   ; Yes = Stop
    
                  LDA Sprite_Data,X                        
    
                  STA GRP0                               
    
                  INX
    
    No_Drawing                        
    
                  STA WSYNC        
    
                  DEY              ; 192 Scanlines drawn ?
    
                  BNE Picture      ; No = Continue
    
                   
    
    
    ;-------------------------------------------------------------
    ;-                       Frame Ends Here                     -
    ;-------------------------------------------------------------
    
         
    
                  LDA #%00000010 
    
                  STA VBLANK       ; Disable TIA Output 
    
    
    
    
    
         ; 30 Scanlines of Overscan
    
           
    
                  LDX #30 
    
    Overscan        
    
                  STA WSYNC 
    
                  DEX 
    
                  BNE Overscan 
    
    
    
                  JMP Start_Frame  ; Build Next Frame 
    
    
    
    
    ;-------------------------------------------------------------
    ;-                         Demo Datas                        -
    ;-------------------------------------------------------------
    
    
    
    Sprite_Data
    
                  .byte #%00011000
    
                  .byte #%00111100
    
                  .byte #%01111110
    
                  .byte #%01101110
    
                  .byte #%11111111
    
                  .byte #%11111000
    
                  .byte #%11100000
    
                  .byte #%11111000
    
                  .byte #%11111111
    
                  .byte #%01111110
    
                  .byte #%01111110
    
                  .byte #%00111100
    
                  .byte #%00011000
    
                  .byte #%00000000
    
    
    ;-------------------------------------------------------------
    ;-                     Set Interrup Vectors                  -
    ;-------------------------------------------------------------
    
    
    
    
    
                  ORG $FFFA 
    
    
    
    Interrupt_Vectors 
    
    
    
                  .word Reset      ; NMI 
    
                  .word Reset      ; RESET 
    
                  .word Reset      ; IRQ 
    
    
    
          END 
    
    


  3. Hi,

    I wrote this utility to draw Playfields for the Atari VCS 2600 and to save the pictures as datas code ready to be included into VCS 2600 programs.

    This editor is WYSWYG.

     

    It supports Asymmetrical, Symmetrical and Mirrored Drawing modes

     

    Learn more or download it in the new "VCS 2600 PROGRAMMING" page of my Website :

    http://khryssun.free.fr/programming.html

     

    It's located in the Tools section.

     

    Hope this will help.


  4. Hi,

    I wrote this utility to draw Playfields for the Atari VCS 2600 and to save the pictures as datas code ready to be included into VCS 2600 programs.

    This editor is WYSWYG.

     

    It supports Asymmetrical, Symmetrical and Mirrored Drawing modes

     

    Learn more or download it in the new "VCS 2600 PROGRAMMING" page of my Website :

    http://khryssun.free.fr/programming.html

     

    It's located in the Tools section.

     

    Hope this will help.


  5. I've programmed an assymetrical playfield with a multi vertical

    scrolling for the right side of the playfield.

     

    Asymmetrical_Playfield.jpg

     

          ; Display 192 Scanlines of Asymetrical Playfield with
    
          ; Multi Scrolling effect of Playfield 2 (right side)
    
     
    
                   LDY #48       ; 48 * 4 pixel high = 192 lines
    
                   LDX #4        ; Change playfield pattern every
    
                                 ; 4 lines
    
    Picture                          
    
                   LDA #%01010000
    
                   STA PF0
    
                   LDA #%00011000
    
                   STA PF1
    
                   LDA #%10111100
    
                   STA PF2
    
     
    
                   SLEEP 4
    
                   LDA PF0ADR
    
                   STA PF0
    
                   SLEEP 4
    
                   LDA PF1ADR
    
                   STA PF1
    
                   SLEEP 4
    
                   LDA PF2ADR
    
                   STA PF2
    
     
    
                   STA WSYNC               
    
            DEX
    
                   BNE Picture
    
                   
    
                   DEY
    
                   BEQ Picture_End
    
                   LDA #%01010000
    
                   STA PF0
    
                   LDA #%00011000
    
                   STA PF1
    
                   LDA #%10111100
    
                   STA PF2
    
                   INC PF0ADR      ; Change Pattern PF0
    
                   LDA PF0ADR
    
                   STA PF0
    
                   INC PF1ADR      ; Change Pattern PF1
    
                   LDA PF1ADR
    
                   STA PF1
    
                   INC PF2ADR      ; Change Pattern PF2
    
                   LDA PF2ADR
    
                   STA PF2
    
                   LDX #3	; 3 Scanlines To Draw
    
                   STA WSYNC;+1 (The Currenr One) = 4
    
                   JMP Picture
    
                   
    
    Picture_End            
    
    

    playfield_code.zip


  6. Never too late to start programming my favorite console. ;)

    It's a mirrored playfield demo with a color scrolling.

     

    I coded this demo thinking to my wife :D

     

    Heart_Color.jpg

     

    Here is the code :

     

    
    
    
    ;/////////////////////////////////////////////////////////////////
    ;// Heart Playfied Demo V1.00 - Christian Bogey, April 16, 2004 //
    ;//      Mirrored Playfield with Playfield Color Scrolling      //  
    ;/////////////////////////////////////////////////////////////////
    
    
    
                   processor 6502 
    
                   include "vcs.h" 
    
                   include "macro.h" 
    
    
    
    
    ;///////////////////////// Vars ///////////////////////////////////////
    
    
    
    Color_Start = $80     ; Playfield Color (Color of the 1st Line)
    
    Color = $81           ; Temp Var Address
    
    
    ;/////////////////// Playfield Datas //////////////////////////////////
    ; PF0
    ;PFData0_0 = #%11110000   ; Up and Down * 8 Lines  // Idem as PFData2_0
    
    PFData0_1 = #%00010000    ;  Middle * 176
    
    
    ; PF1
    ;PFData1_0 = #%11111111   ; Up and Down * 8 Lines // Idem as PFData2_0
    ;PFData1_1 = #%00000000   ; Middle * 176          // Idem as PFData2_1
    
           
    ; PF2
    
    PFData2_0 = #%11111111    ; Up and Down * 8 Lines
    
    PFData2_1 = #%00000000    ; Empty Lines * 8 (5 Up and 5 Down)
    
    
    
    
    ;/////////////////  Start of Code ///////////////////////////////////// 
    
    
    
                   SEG 
    
                   ORG $F000 
    
    
    
    Reset 
    
    
    
          ; Clear RAM, TIA registers and Set Stack Pointer to #$FF
    
                   SEI
    
                   CLD	
    
                   LDX #$FF
    
                   TXS
    
                   LDA #0
    
    Clear_Mem
    
                   STA 0,X
    
                   DEX
    
                   BNE Clear_Mem  	
    
    
    
                   STA Color_Start; Init Playfield Color
    
                   LDA #1
    
                   STA CTRLPF; Mirrored Playfiels
    
                   LDA #$00
    
                   STA COLUBK; Set Background to Black
    
    
    ;///////////////////  Picture Starts Here /////////////////////////////
    
    
    
    Start_Frame 
    
    
    
          ; Start VSYNC
    
    
    
                   LDA #2 
    
                   STA VSYNC 
    
    
    
                   STA WSYNC 
    
                   STA WSYNC 
    
                   STA WSYNC    ; 3 Scanlines of VSYNC 
    
    
    
                   LDA #0 
    
                   STA VSYNC; End VSYNC         
    
    
    
    
    
          ; 37 Scanlines of Vertical Blank... 
    
              
    
                   LDX 37
    
    Vertical_Blank  
    
                   STA WSYNC 
    
                   DEX 
    
                   BNE Vertical_Blank 
    
                   
    
                   LDA #0 
    
                   STA VBLANK ; Enable TIA Output
    
                                   
    ;////////////// Start To Draw Playfield ///////////////////////////////      	
    
             
    
                   LDX Color_Start
    
                   STX Color	
    
                   STX COLUPF  
    
          ; Draw Top Bar  
    
                   LDY #8	; 8 Lines to Draw
    
                   LDA #PFData2_0
    
                   STA PF0
    
                   STA PF1
    
                   STA PF2
    
    Draw_Bar1       
    
                   STA WSYNC   
    
                   DEX
    
                   STX COLUPF  
    
                   DEY
    
                   BNE Draw_Bar1 
    
                   
    
                
    
                   
    
          ; Draw 5 Empty Lines
    
                   LDY #5*8
    
                   LDA #PFData0_1
    
                   STA PF0
    
                   LDA PFData2_1
    
                   STA PF1
    
                   STA PF2
    
    Empty_Lines1
    
                   STA WSYNC 
    
                   DEX
    
                   STX COLUPF  
    
                   DEY
    
                   BNE Empty_Lines1                
    
    
    
     
    
          ; Draw Heart
    
                   STX Color
    
                   LDX #$0C       ; Init Index
    
    Draw_Heart  
    
                   LDA PF2HeartData-1,X       ; (Keep PF0 & PF1)
    
                   STA PF2
    
                   LDY #8            ; 8 Lines
    
                   TXA                 ; Save Index
    
                   LDX Color
    
    Draw_Heart_Line
    
                   STA WSYNC
    
                   DEX
    
                   STX COLUPF  
    
                   DEY
    
                   BNE Draw_Heart_Line
    
                   STX Color        ; Save Color Index
    
                   TAX                 ; Restore Index
    
                   DEX
    
                   BNE Draw_Heart
    
    
    
          ; Draw 5 Empty Lines
    
                   LDX Color; Restore Color Index
    
                   LDY #5*8
    
                   LDA PFData2_1
    
                   STA PF2           ; Clear PF2 (Keep PF0 & PF1)
    
    Empty_Lines2
    
                   STA WSYNC   
    
                   DEX
    
                   STX COLUPF  
    
                   DEY
    
                   BNE Empty_Lines2
    
    
    
          ; Draw Bottom Bar  
    
                   LDY #8	; 8 Lines to Draw
    
                   LDA #PFData2_0
    
                   STA PF0
    
                   STA PF1
    
                   STA PF2
    
    Draw_Bar2            
    
                   STA WSYNC   
    
                   DEX
    
                   STX COLUPF             
    
                   DEY
    
                   BNE Draw_Bar2
    
                   
    ;////////////// End To Draw Playfield /////////////////////////////////      
    
    
    
          ; Makes Colors to Scroll Up                 
    
                   LDX Color_Start
    
                   DEX                      ; Use INX instead of DEX to Scroll Up
    
                   STX Color_Start
    
    
    ;////////////// End Of Display ////////////////////////////////////////      	
    
       
    
                   LDA #%01000010     ; Disable VIA Output
    
                   STA VBLANK           
    
    
    
          ; 30 scanlines of overscan... 
    
    
    
                   LDX #30 
    
    Overscan        
    
                   STA WSYNC 
    
                   DEX 
    
                   BNE Overscan 
    
    
    
                   JMP Start_Frame       ; Build Next Frame
    
    
    ;////////////// Heart Data ////////////////////////////////////////////
    
    
    
    PF2HeartData
    
                   .byte #%10000000; Heart Pic Data End * 8 Lines
    
                   .byte #%11000000;
    
                   .byte #%11100000;
    
                   .byte #%11110000;
    
                   .byte #%11111000;
    
                   .byte #%11111100;
    
                   .byte #%11111110; 12 * 8 = 96
    
                   .byte #%11111110;	
    
                   .byte #%11111110;
    
                   .byte #%11111100;
    
                   .byte #%11111000;
    
                   .byte #%01110000   ; Heart Pic Data Start * 8 Lines
    
     
    ;////////////// Set Vectors ///////////////////////////////////////////
    
    
    
               ORG $FFFA 
    
    
    ; Interrupt Vectors 
    
    
    
               .word Reset          ; NMI 
    
               .word Reset          ; RESET 
    
               .word Reset          ; IRQ 
    
    
    
             END 
    
    
    
    
    
    

    heart_color.zip


  7. My top 5 :

     

    - Howard Scott Warshaw : Yar's revenge, E.T. and Raiders of the lost ark are my favorites games.

     

    - John Van Ryzin for the amazing H.E.R.O.

     

    - Rex Bradford for the wonderful SW: The Empire Strikes Back

     

    - Carla Meninsky for the Great Star Raiders

     

    - David Crane for all the good games he programmed too


  8. A modification can be done on the 7800's mainboard if robot tank doesn't work with it.

     

    I don't remember where I found the schematics (maybe it's still into the Atari Age Message Board Archives) but I've done the modification 2 years ago (as I remember it's just a resistor to remove).

     

    I made an avanced version of this modification with a switch button located at the back of the 7800 so I can enable/disable the resistor.

     

    and it works fine. ;)


  9. Well I've got a little secret to tell about E.T. :D

    The easter egg I've hidden I my VCS Simulator's game "Rays' Quest" was about E.T.

     

    As I made it near impossible to find :ponder: ... I think I can tell now what it is :

     

    When doing several short right and left moves with the yar pressing the fire button at the left bottom of the room located just before the Left symbols deposite room, it makes E.T. appear and crossing the screen (and gives extra lives too).


  10. Why don't add a "Set Atariage as your default Start Page" link at the top or the bottom of the main Atariage page ?

     

    Just got that idea because as a lot of people here I'm surfing the web a lot and I'am bothered with some sites (lottos in particular) which change the default start page of my browser without asking. :x

     

    I've got to go to the option menu of my browser to chage the default starting url manually everytime.

     

    I'am sure I'am not the only one in this case, and I think It would be usefull to add a "Set Atariage as the default Start Page" link to the main AtariAge page so we'll just have to click on it to redefine The AtariAge web site as the default one. :idea: ;)

     

    What do you think about it :?: :love:


  11. Hi , I'm khryssun's wife and I can see your web site each time I connect myself on the web (my husband has set atariage's page as the default web browser's start page). So I would like to say that I especially enjoyed the saint valentin's atariage's logo with the lovely little hearts. :love: :love: :D

     

    Please continue to make your site so interresting for my husband (I know he really loves it ;) ..... and it was a really pleasure for me to see him so happy when he received the cart he won at the atariage's Christmas 2003 contest) and so pleased to look at (nice design...). :D :D

     

    BTW I was really surprised when I saw the picture's quality of the cartrige. Congratulations for the programmers. :D

×
×
  • Create New...