10 REM TTXPROM
   20 REM Make TTXT address lookup PROM
   30 REM DEN, HS, VS, RES not needed if SAA5020 timer used
   40 :
   50 REM Horizontal signals
   60 REM          cell/8 -> 0011223344556677       01234567
   70 REM          cell/4 -> 0123456789ABCDEF
   80 REM  0-39 display      XXXXXXXXXX------  DEN  ~~~~~___
   90 REM 40-47 front porch  ----------XX----
  100 REM 48-51 sync         ------------X---  HS   ~~~~~~_~
  110 REM 52-63 back porch   -------------XXX
  120 :
  130 REM                           222222233          222222233
  140 REM Vertical signals   012..12345678901       0..345678901
  150 REM  0-24 display      XXXXXXXXX-------  DEN  ~~~~~_______
  160 REM 25-26              ----------------
  170 REM 27    sync         ------------X---  VS   ~~~~~~~~_~~~
  180 REM 28-29              ----------------
  190 REM 30    reset        --------------X-  RES  ~~~~~~~~~~_~
  200 REM 31                 ----------------
  210 :
  220 out%=OPENOUT("6440.bin")
  230 FOR addr%=0 TO 255
  240   col%=addr% AND (64/8)-1
  250   row%=addr% DIV (64/8)
  260   cell%=row%*(40/8)+col%
  270   REM b7=0 - not-DEN outside display area
  280   REM        b6=HS pulse - OR'd with external A2
  290   REM        b5=VS pulse
  300   REM        b4=frame reset
  310   REM b7=1 - DEN     display area
  320   REM        b0-b6 = address
  330   :
  340   byte%=&7F
  350   IF col%=6:byte%=byte% AND NOT &40        :REM HS
  360   IF row%=27:byte%=byte% AND NOT &20       :REM VS
  370   IF row%=30:byte%=byte% AND NOT &10       :REM RES
  380   IF col%<5 AND row%<25:byte%=cell% OR &80 :REM DEN+cell
  390   IF col%=0:PRINT "row:";FNd0(row%,2);" ";FNh0(addr%,2);": ";
  400   PRINT FNh0(byte%,2);" ";
  410   IF col%=(64/8)-1:PRINT
  420   BPUT#out%,byte%
  430 NEXT
  440 CLOSE#out%
  450 END
  460 :
  470 DEFFNh0(A%,N%)=RIGHT$("0000000"+STR$~A%,N%)
  480 DEFFNd0(A%,N%)=RIGHT$("0000000"+STR$A%,N%)