Last active
          July 3, 2019 22:47 
        
      - 
      
- 
        Save JettMonstersGoBoom/82f4d299758d2780be4162b281118b0a to your computer and use it in GitHub Desktop. 
    Pacman Millfork sample
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | //java -jar ..\..\millfork.jar pacman.mfk -s -g -o pacman -t pacman_machine | |
| import random | |
| byte watchdog @$50C0 | |
| word stack_address @$4fee | |
| byte irqen @$5000 | |
| const pointer vidram = $4000 | |
| const word colram = $4400 | |
| const pointer sprtbase = $4ff0 | |
| const pointer spritecoords= $5060 | |
| const byte sprtIndex = 0 | |
| const byte sprtColor = 1 | |
| const byte spriteX = $00 | |
| const byte spriteY = $01 | |
| const byte sprite0 = 0 | |
| const byte sprite1 = 2 | |
| const byte sprite2 = 4 | |
| const byte sprite3 = 6 | |
| const byte sprite4 = 8 | |
| const byte sprite5 = 10 | |
| byte timer | |
| array playerX[8] | |
| array playerY[8] | |
| array playerDX[8] | |
| array playerDY[8] | |
| array playerFR[8] | |
| macro asm void disable_irq() { | |
| DI | |
| ld sp,$4ff0 | |
| ld a, $ff | |
| out (0), a //// set interrupt vector | |
| } | |
| macro asm void enable_irq() { | |
| im 1 | |
| ld a, $01 | |
| ld (irqen), a // enable hardware interrupts | |
| EI | |
| } | |
| void __start()@0{ | |
| main() | |
| } | |
| interrupt void _irq()@$38 { | |
| asm { | |
| di | |
| } | |
| irqen=0 | |
| timer+=1 | |
| watchdog=0 | |
| irqen=1 | |
| asm { | |
| ei | |
| } | |
| } | |
| interrupt void _nmi()@$66 { | |
| } | |
| void main() { | |
| byte row | |
| byte page | |
| pointer p | |
| disable_irq() | |
| watchdog=0 | |
| init_rand_seed() | |
| p = vidram+64 | |
| for row,0,until,255 { | |
| p[row] = (row+timer)&$3f | |
| } | |
| for row,0,until,8 { | |
| playerX[row] = rand() | |
| playerY[row] = rand() | |
| playerDX[row]=1 | |
| playerDY[row]=1 | |
| playerFR[row]=rand() | |
| } | |
| timer = 3 | |
| enable_irq() | |
| putstrz(0,2,"HELLO PAC"z,1) | |
| putstrz(0,3,"NEXT LINE"z,3) | |
| putstrz(0,10,"MONSTERS GO BOOM"z,5) | |
| putchr(0,1,'A',7) | |
| while true { | |
| p = colram+64 | |
| page = ((timer>>3)&%11111110)+1 | |
| for row,0,until,255 { | |
| p[row] = page + (row<<1) | |
| } | |
| for row,0,until,8 { | |
| page = row+row | |
| spritecoords[page + spriteX]=playerX[row] | |
| spritecoords[page + spriteY]=playerY[row] | |
| sprtbase[page + sprtIndex]=playerFR[row] | |
| sprtbase[page + sprtColor]=1 | |
| if timer&$1==0{ | |
| playerX[row]+=playerDX[row] | |
| playerY[row]+=playerDY[row] | |
| if playerX[row]>250 { | |
| playerDX[row]=$ff | |
| } | |
| if playerX[row]<6 { | |
| playerDX[row]=1 | |
| } | |
| if playerY[row]>250 { | |
| playerDY[row]=$ff | |
| } | |
| if playerY[row]<6 { | |
| playerDY[row]=1 | |
| } | |
| } | |
| if timer&$f==0{ | |
| playerFR[row]+=1 | |
| } | |
| } | |
| #if 0 | |
| spritecoords[sprite0 + spriteX]=timer | |
| spritecoords[sprite0 + spriteY]=timer | |
| sprtbase[sprite0 + sprtIndex]=timer | |
| sprtbase[sprite0 + sprtColor]=25-timer | |
| #endif | |
| } | |
| } | |
| void putchr(byte x,byte y,byte ch,byte color){ | |
| pointer scr | |
| pointer col | |
| byte v | |
| scr = $3A0 | |
| scr -= x*32 | |
| col = colram + scr | |
| scr += vidram | |
| scr[y]=ch | |
| col[y]=color | |
| } | |
| void putstrz(byte x,byte y,pointer str,byte color) { | |
| pointer scr | |
| pointer col | |
| byte v | |
| scr = $3A0 | |
| scr -= x*32 | |
| scr += y | |
| col = colram + scr | |
| scr += vidram | |
| byte index | |
| index = 0 | |
| while str[index] != 0 { | |
| v=str[index] | |
| if v!=$20 { | |
| scr[0]=str[index] | |
| col[0]=color | |
| } | |
| scr-=32 | |
| col-=32 | |
| index += 1 | |
| } | |
| } | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | ; pacman hardware | |
| [compilation] | |
| arch=z80 | |
| encoding=ascii | |
| screen_encoding=ascii | |
| modules=default_panic | |
| [allocation] | |
| segments=default | |
| default_code_segment=default | |
| segment_default_start=$0000 | |
| segment_default_codeend=$fff | |
| segment_default_datastart=$4c00 | |
| segment_default_end=$4ff0 | |
| [define] | |
| PACMAN=1 | |
| WIDESCREEN=0 | |
| KEYBOARD=0 | |
| ; TODO: ? | |
| JOYSTICKS=1 | |
| HAS_BITMAP_MODE=1 | |
| [output] | |
| style=single | |
| format=$0000:$0fff | |
| extension=6e | |
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment