home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 300-399 / ff396.lha / turbotopaz / TempoTopaz.asm < prev    next >
Assembly Source File  |  1990-10-29  |  14KB  |  514 lines

  1. ;    TempoTopaz V1.0
  2. ;    by Preben Nielsen
  3.     OPT O+
  4. ;    OPT O1+        ;Tells when a branch could be optimised to short
  5. ;    OPT i+        ;Tells when '#' is probably missing
  6.  
  7.     incdir    "INCLUDE:"
  8.     include "exec/memory.i"
  9.     include "exec/exec_lib.i"
  10.     include "graphics/rastport.i"
  11.     include "graphics/text.i"
  12.     include "graphics/graphics_lib.i"
  13.     include "intuition/intuition.i"
  14.     include "libraries/dos.i"
  15.     include "libraries/dos_lib.i"
  16.     include "libraries/diskfont.i"
  17.     include "libraries/diskfont_lib.i"
  18.     include "libraries/dosextens.i"
  19.     include "Workbench/startup.i"
  20.     include "Workbench/workbench.i"
  21.     include "Workbench/icon_lib.i"
  22.  
  23. LF        =10
  24.  
  25. LoadBase    MACRO
  26.         IFNC        '\1','ExecBase'
  27.         movea.l        \1(PC),A6
  28.         ENDC
  29.         IFC        '\1','ExecBase'
  30.         movea.l        4.W,A6
  31.         ENDC
  32.         ENDM
  33. CallLib        MACRO
  34.         jsr        _LVO\1(A6)
  35.         ENDM
  36. Call        MACRO
  37.         bsr        \1
  38.         ENDM
  39. Push        MACRO
  40.         movem.l        \1,-(SP)
  41.         ENDM
  42. Pop        MACRO
  43.         movem.l        (SP)+,\1
  44.         ENDM
  45.  
  46. Arg        EQUR        A4
  47. ArgLen        EQUR        D4
  48. Installed    EQUR        D7
  49.  
  50. Start        Push        D0-D7/A0-A6
  51.         move.l        D0,ArgLen
  52.         move.l        A0,Arg
  53.         LoadBase    ExecBase
  54.         lea        DosName(PC),A1
  55.         CallLib        OldOpenLibrary
  56.         move.l        D0,DosBase
  57.         beq        Exit
  58.         lea        GfxName(PC),A1
  59.         CallLib        OldOpenLibrary
  60.         move.l        D0,GfxBase
  61.         beq        Exit
  62.         LoadBase    GfxBase
  63.         lea        FontAttr(PC),A0
  64.         CallLib        OpenFont
  65.         move.l        D0,TFont
  66.         move.l        D0,FontCheck+2        ;This makes 'cmp.l #Font,52(A1)'
  67.         beq        Exit
  68. FindFunc    LoadBase    ExecBase
  69.         lea        PortName(PC),A1
  70.         CallLib        FindPort        ;Are we installed ?
  71.         move.l        D0,Installed
  72.         suba.l        A1,A1
  73.         CallLib        FindTask        ;Find us
  74.         movea.l        D0,A2
  75.         tst.l        pr_CLI(A2)
  76.         bne.S        CLIStartup
  77. WBenchStartup    lea        pr_MsgPort(A2),A0
  78.         CallLib        WaitPort        ;Wait for a message
  79.         lea        pr_MsgPort(A2),A0
  80.         CallLib        GetMsg            ;Get the message
  81.         move.l        D0,WBenchMsg        ;Save it for later reply
  82.         tst.l        Installed        ;Install or Remove ?
  83.         bne.S        CLIAndWBStartup
  84.         moveq        #0,ArgLen        ;Signal that we haven't found args yet
  85.         move.l        D0,A2
  86.         move.l        sm_NumArgs(A2),D0    ;Any args ?
  87.         move.l        sm_ArgList(A2),A2
  88.         subq.l        #1,D0
  89.         blt.S        CLIAndWBStartup
  90.         beq.S        FoundArg
  91.         addq.w        #wa_SIZEOF,A2
  92. FoundArg    move.l        wa_Lock(A2),D1
  93.         move.l        wa_Name(A2),A2        ;Name of icon
  94.         beq.S        NoLock
  95.         LoadBase    DosBase
  96.         CallLib        CurrentDir
  97. NoLock        LoadBase    ExecBase
  98.         lea        IconName(PC),A1
  99.         CallLib        OldOpenLibrary
  100.         move.l        D0,IconBase
  101.         beq.S        CLIAndWBStartup
  102.         LoadBase    IconBase
  103.         move.l        A2,A0
  104.         CallLib        GetDiskObject        ;Get the icon
  105.         move.l        D0,DiskObj
  106.         beq.S        CLIAndWBStartup
  107.         move.l        D0,A2
  108.         move.l        do_ToolTypes(A2),A0
  109.         lea        FontTxt(PC),A1
  110.         CallLib        FindToolType        ;Find 'FONT=??????'
  111.         move.l        D0,Arg
  112.         move.l        D0,ArgLen        ;Signal that we have or haven't found args
  113.         bra.S        CLIAndWBStartup
  114. CLIStartup    subq.l        #1,ArgLen
  115.         clr.b        0(Arg,ArgLen)
  116. CLIAndWBStartup    tst.l        Installed        ;Install or Remove ?
  117.         beq.S        Install
  118.  
  119. Remove        move.l        Installed,A1
  120.         lea        MyText-MyPort(A1),A1    ;This is the start of the text function
  121.         move.l        GfxBase(PC),A0
  122.         cmpa.l        _LVOText+2(A0),A1
  123.         lea        AlteredTxt(PC),A1
  124.         bne        Write2Lines
  125.         move.l        Installed,A1
  126.         CallLib        RemPort
  127.         move.l        Installed,A0
  128.         CallLib        Forbid
  129.         move.w        #NFuncEnd-NFunc,D0
  130.         lea        NFunc(PC),A1
  131.         lea        NFunc-MyPort(A0),A0    ;This is the memory we allocated
  132.         Call        MemCopy
  133.         movea.w        #_LVOText,A0
  134.         movea.l        GfxBase(PC),A1
  135.         move.l        OldFunc+2(PC),D0    ;Function to restore
  136.         CallLib        SetFunction        ;Install the old function
  137.         tst.l        OFont            ;Were we useing unmodified topaz-80
  138.         beq.S        DoneResFont
  139.         move.l        TFont(PC),A1        ;Restore topaz-80
  140.         lea        tf_YSize(A1),A1
  141.         lea        TopazMisc(PC),A0
  142.         moveq        #tf_SIZEOF-tf_YSize,D0
  143.         move.w        tf_Accessors(A1),D1
  144.         Call        MemCopy
  145.         move.w        D1,tf_Accessors(A1)
  146. DoneResFont    CallLib        Permit
  147.         lea        RemovedTxt(PC),A1
  148.         bra        Write2Lines
  149.  
  150. Install        tst.l        ArgLen
  151.         ble        DoneLoadFont
  152.         move.l        Arg,FontAttr
  153.         LoadBase    GfxBase
  154.         lea        FontAttr(PC),A0
  155.         move.b        #FPB_DISKFONT,ta_Flags(A0)
  156.         CallLib        OpenFont
  157.         tst.l        D0
  158.         bne.S        FoundFont
  159.         LoadBase    ExecBase
  160.         lea        DFName(PC),A1
  161.         CallLib        OldOpenLibrary
  162.         lea        NoLibTxt(PC),A1
  163.         move.b        #LF,35(A1)        ;Set a LF
  164.         move.l        D0,DFBase
  165.         beq        Write2Lines
  166.         LoadBase    DFBase
  167.         lea        FontAttr(PC),A0
  168.         CallLib        OpenDiskFont
  169.         move.l        D0,D7
  170.         LoadBase    ExecBase
  171.         movea.l        DFBase(PC),A1
  172.         CallLib        CloseLibrary
  173.         move.l        D7,D0
  174. FoundFont    move.l        D0,OFont
  175.         lea        NoFontTxt(PC),A1
  176.         beq        Write2Lines
  177.         move.l        D0,A0
  178.         move.l        TFont(PC),A2
  179.         moveq        #8,D0
  180.         lea        Not8x8Txt(PC),A1
  181.         cmp.w        tf_YSize(A0),D0
  182.         bne        Write2Lines
  183.         cmp.w        tf_XSize(A0),D0
  184.         bne        Write2Lines
  185.         lea        Mismatch(PC),A1
  186.         move.w        tf_Baseline(A0),D0
  187.         cmp.w        tf_Baseline(A2),D0
  188.         bne        Write2Lines
  189.         lea        CantUseProp(PC),A1
  190.         btst        #FPB_PROPORTIONAL,tf_Flags(A0)
  191.         bne        Write2Lines
  192. DoneLoadFont    LoadBase    ExecBase
  193.         move.l        #BufMem,D0
  194.         move.l        #MEMF_CHIP!MEMF_CLEAR,D1
  195.         CallLib        AllocMem        ;Allocate memory for temporary text
  196.         lea        NoMemTxt(PC),A1
  197.         move.l        D0,BMem
  198.         beq        Write2Lines
  199.         move.l        #FuncMem,D0
  200.         move.l        #MEMF_PUBLIC!MEMF_CLEAR,D1
  201.         CallLib        AllocMem        ;Allocate memory for function
  202.         lea        NoMemTxt(PC),A1
  203.         move.l        D0,FMem
  204.         beq        Write2Lines
  205.         CallLib        Forbid
  206.         tst.l        OFont
  207.         beq.S        DoneRepFont        ;Shall we use unmodified topaz-80
  208.         move.l        TFont(PC),A0        ;Save something from topaz-80
  209.         lea        tf_YSize(A0),A0
  210.         lea        TopazMisc(PC),A1
  211.         moveq        #tf_SIZEOF-tf_YSize,D0
  212.         Call        MemCopy
  213.         move.l        OFont(PC),A0        ;Overwrite topaz-80
  214.         lea        tf_YSize(A0),A0
  215.         move.l        TFont(PC),A1
  216.         lea        tf_YSize(A1),A1
  217.         moveq        #tf_SIZEOF-tf_YSize,D0
  218.         move.w        tf_Accessors(A1),D1
  219.         Call        MemCopy
  220.         move.w        D1,tf_Accessors(A1)
  221. DoneRepFont    move.l        TFont(PC),A0
  222.         moveq        #0,D0
  223.         move.b        tf_LoChar(A0),D0
  224.         move.w        D0,IsItLow+2        ;This makes 'subi.w #tf_LoChar,D1'
  225.         move.b        tf_HiChar(A0),D0
  226.         sub.b        tf_LoChar(A0),D0
  227.         move.w        D0,IsItHigh+2        ;This makes 'cmpi.w #tf_HiChar-tf_LoChar,D1'
  228.         addq.w        #1,D0
  229.         move.w        D0,WriteDummy+2        ;This makes 'move.w #tf_HiChar-tf_LoChar+1,D1'
  230.         move.w        tf_Baseline(A0),D0
  231.         andi.w        #%0000000000000111,D0
  232.         lsl.w        #8,D0
  233.         lsl.w        #1,D0
  234.         ori.w        #%0101000101000011,D0
  235.         move.w        D0,SubBaseLine        ;We just made a subq.w tf_baseline,D3
  236.         move.w        #NFuncEnd-NFunc,D0
  237.         lea        NFunc(PC),A0
  238.         movea.l        FMem(PC),A1
  239.         movea.l        A1,A2
  240.         Call        MemCopy
  241.         LoadBase    ExecBase
  242.         lea        MyPort-NFunc(A2),A1
  243.         lea        PortName-NFunc(A2),A0
  244.         move.l        A0,10(A1)        ;Set portname
  245.         CallLib        AddPort        
  246.         moveq        #MyText-NFunc,D0
  247.         add.l        A2,D0
  248.         lea        FontCheck+2-NFunc(A2),A1
  249.         move.l        A1,LockFunc+2-NFunc(A2)            ;\
  250.         move.l        A1,UnLockFunc+2-NFunc(A2)        ; \Modify some absolute code
  251.         move.l        GfxBase(PC),A1                ; /
  252.         move.l        _LVOText+2(A1),OldFunc+2-NFunc(A2)    ;/Save the address of the old 'Text' function
  253.         move.w        #_LVOText,A0
  254.         CallLib        SetFunction
  255.         move.l        D0,OldFunc+2-NFunc(A2)    ;Save the address of the old 'Text' function
  256.         clr.l        BMem            ;\
  257.         clr.l        FMem            ; >Don't free memory until we are re-run
  258.         clr.l        OFont            ;/
  259.         CallLib        Permit
  260.         lea        FontName(PC),A1
  261.         move.l        FontAttr(PC),A0
  262. CopyFName    move.b        (A0)+,(A1)+
  263.         bne.S        CopyFName
  264.         move.b        #LF,-1(A1)
  265.         clr.b        (A1)
  266.         lea        InstalledTxt(PC),A1
  267. Write2Lines    Call        OpenCON            ;A0/A1=First/Second line
  268.         lea        NameOfFunc(PC),A0
  269.         Call        WriteCON
  270.         move.l        A1,A0
  271.         Call        WriteCON
  272.         Call        CloseCON
  273.  
  274. Exit
  275. FreeTopaz    LoadBase    GfxBase
  276.         move.l        TFont(PC),D0
  277.         beq.S        FreeFont
  278.         movea.l        D0,A1
  279.         CallLib        CloseFont
  280. FreeFont    move.l        OFont(PC),D0
  281.         beq.S        FreeBMem
  282.         movea.l        D0,A1
  283.         CallLib        CloseFont
  284. FreeBMem    LoadBase    ExecBase
  285.         move.l        BMem(PC),D0
  286.         beq.S        FreeFMem
  287.         movea.l        D0,A1
  288.         move.l        #BufMem,D0
  289.         CallLib        FreeMem            ;Free temporary buffer
  290. FreeFMem    move.l        FMem(PC),D0
  291.         beq.S        FreeGfx
  292.         movea.l        D0,A1
  293.         move.l        #FuncMem,D0
  294.         CallLib        FreeMem            ;Free function memory
  295. FreeGfx        move.l        GfxBase(PC),D0
  296.         beq.S        FreeDos
  297.         movea.l        D0,A1
  298.         CallLib        CloseLibrary
  299. FreeDos        move.l        DosBase(PC),D0
  300.         beq.S        Flush
  301.         movea.l        D0,A1
  302.         CallLib        CloseLibrary
  303. Flush        moveq        #0,D1            ;Flush unused libs, fonts etc.
  304.         move.l        #$FFFFFF,d0
  305.         CallLib        AllocMem
  306. ReplyWB        move.l        WBenchMsg(PC),D0
  307.         beq.S        AllDone
  308.         move.l        DiskObj(PC),D0
  309.         beq.S        FreeIcon
  310.         move.l        D0,A0
  311.         LoadBase    IconBase
  312.         CallLib        FreeDiskObject
  313. FreeIcon    LoadBase    ExecBase    
  314.         move.l        IconBase(PC),D0
  315.         beq.S        WBEnd
  316.         move.l        D0,A1
  317.         CallLib        CloseLibrary
  318. WBEnd        CallLib        Forbid
  319.         movea.l        WBenchMsg(PC),A1
  320.         CallLib        ReplyMsg        ;Reply WBenchMessage if we are started from WB
  321. AllDone        Pop        D0-D7/A0-A6
  322.         moveq        #0,D0
  323.         rts
  324.  
  325. OpenCON        Push        D0-D7/A0-A6
  326.         LoadBase    DosBase
  327.         tst.l        WBenchMsg
  328.         beq.S        FromCLI
  329. FromWB        move.l        #CONName,D1
  330.         move.l        #MODE_OLDFILE,D2
  331.         CallLib        Open
  332.         bra.S        DoneOpen
  333. FromCLI        CallLib        Output
  334. DoneOpen    move.l        D0,Handle
  335.         bra.S        DoneCON
  336. ;A0=NULL terminated text to write
  337. WriteCON    Push        D0-D7/A0-A6
  338.         LoadBase    DosBase
  339.         move.l        Handle(PC),D1
  340.         beq.S        DoneCON
  341.         move.l        A0,D2
  342.         moveq        #-1,D3
  343. strlenLoop    addq.l        #1,D3
  344.         tst.b        (A0)+
  345.         bne.S        strlenLoop
  346.         CallLib        Write
  347.         bra.S        DoneCON
  348. CloseCON    Push        D0-D7/A0-A6
  349.         LoadBase    DosBase
  350.         move.l        Handle(PC),D2
  351.         beq.S        DoneCON
  352.         tst.l        WBenchMsg
  353.         beq.S        DoneCON
  354.         move.l        #150,D1
  355.         CallLib        Delay
  356.         move.l        D2,D1
  357.         CallLib        Close
  358. DoneCON        Pop        D0-D7/A0-A6
  359.         rts
  360.  
  361. ;A0=Source, A1=Dest, D0:16=Count
  362. MemCopy        Push        D0/A0-A1
  363.         subq.w        #1,D0
  364. MemLoop        move.b        (A0)+,(A1)+
  365.         dbf        D0,MemLoop
  366.         Pop        D0/A0-A1
  367.         rts
  368.  
  369.  
  370. ;================ Here comes the new Text-Function =================
  371. Rp        EQUR        A1
  372. BData        EQUR        A2
  373. Buf        EQUR        A3
  374. CharData    EQUR        A4
  375. CharLoc        EQUR        A5
  376. Modulo        EQUR        D6
  377.  
  378. ;D0=count    D1=ascii    D2=x        D3=y
  379. ;D4=count    D5=temp. A4    D6=tf_Modulo    D7=layer
  380. ;A0=string    A1=RastPort    A2=bitmap data    A3=temp buffer
  381. ;A4=tf_CharData    A5=tf_CharLoc    A6=GfxBase    A7=SP
  382. * Put the code between NFunc and NFuncEnd
  383. NFunc
  384. OldFunc        jmp        123455678        ;This instruction will be changed by the installation
  385. MyText        tst.b        rp_AlgoStyle(Rp)    ;We can only write strings with style 0
  386.         bne.S        OldFunc
  387.         cmpi.w        #MaxL,D0        ;Is string too long for MyText
  388.         bgt.S        OldFunc
  389. FontCheck    cmp.l        #12345678,rp_Font(Rp)    ;This instruction will be changed by the installation
  390.         bne.S        OldFunc
  391. LockFunc    not.w        12345678        ;This instruction will be changed by the installation
  392.         Push        D2-D7/A2-A5
  393.         move.l        D0,D4
  394.         beq        UnLockFunc
  395.         move.l        (Rp),D7
  396.         beq.S        LetsWrite
  397.         move.l        D7,A5
  398.         CallLib        LockLayerRom        ;Commodore says this doesn't destroy registers
  399. LetsWrite    movem.l        BMem(PC),Buf/A4        ;Get BMem/Font pointers
  400.         move.l        Buf,D5
  401.         move.w        tf_Modulo(A4),Modulo
  402.         move.l        tf_CharLoc(A4),CharLoc
  403.         move.l        tf_CharData(A4),CharData
  404.         subq.w        #1,D0
  405. MoveChar    moveq        #0,D1
  406.         move.b        (A0)+,D1
  407. IsItLow        subi.w        #12345,D1        ;This instruction will be changed by the installation
  408.         bmi.S        WriteDummy
  409. IsItHigh    cmpi.w        #12345,D1        ;This instruction will be changed by the installation
  410.         ble.S        Cont    
  411. WriteDummy    move.w        #12345,D1        ;This instruction will be changed by the installation
  412. Cont        add.w        D1,D1
  413.         add.w        D1,D1
  414.         move.w        0(CharLoc,D1),D1    ;D1=bitoffset into tf_CharData
  415.         lsr.w        #3,D1            ;D1=byteOffset info tf_CharData
  416.         movea.l        CharData,BData
  417.         adda.w        D1,BData        ;Here is the character bitmap
  418.         move.b        (BData),(Buf)+
  419.         add.w        Modulo,BData
  420.         move.b        (BData),1*MaxL-1(Buf)
  421.         add.w        Modulo,BData
  422.         move.b        (BData),2*MaxL-1(Buf)
  423.         add.w        Modulo,BData
  424.         move.b        (BData),3*MaxL-1(Buf)
  425.         add.w        Modulo,BData
  426.         move.b        (BData),4*MaxL-1(Buf)
  427.         add.w        Modulo,BData
  428.         move.b        (BData),5*MaxL-1(Buf)
  429.         add.w        Modulo,BData
  430.         move.b        (BData),6*MaxL-1(Buf)
  431.         add.w        Modulo,BData
  432.         move.b        (BData),7*MaxL-1(Buf)
  433.         dbra        D0,MoveChar
  434.         move.l        D5,A0
  435.         moveq        #0,D0
  436.         moveq        #MaxL,D1
  437.         movem.w        rp_cp_x(Rp),D2-D3
  438. SubBaseLine    subq.w        #1,D3            ;This instruction will be changed by the installation
  439.         lsl.w        #3,D4
  440.         add.w        D4,rp_cp_x(Rp)
  441.         moveq        #8,D5            ;Height
  442.         CallLib        BltTemplate
  443.         tst.l        D7
  444.         beq.S        UnLockFunc
  445.         move.l        D7,A5
  446.         CallLib        UnlockLayerRom
  447. UnLockFunc    not.w        12345678        ;This instruction will be changed by the installation
  448.         Pop        D2-D7/A2-A5
  449.         jmp        _LVOWaitBlit(A6)
  450. FMem        dc.l        0
  451. BMem        dc.l        0            ;Buffer to blit from
  452. TFont        dc.l        0
  453. OFont        dc.l        0
  454. TopazMisc    dcb.b        tf_SIZEOF-tf_YSize,0
  455. MyPort
  456. ;struct MsgPort {
  457. ;        struct Node {    ;struct  Node mp_Node; 
  458.         dc.l        0    ;struct  Node *ln_Succ;
  459.         dc.l        0    ;struct  Node *ln_Pred;
  460.         dc.b        0    ;UBYTE   ln_Type;
  461.         dc.b        0    ;BYTE    ln_Pri; 
  462.         dc.l        PortName;char    *ln_Name; 
  463. ;        }
  464.         dc.b        0    ;UBYTE   mp_Flags; 
  465.         dc.b        0    ;UBYTE   mp_SigBit;
  466.         dc.l        0    ;struct  Task *mp_SigTask;
  467. ;        struct List {    ;struct  List mp_MsgList;
  468.         dc.l        0    ;struct  Node *lh_Head;
  469.         dc.l        0    ;struct  Node *lh_Tail;
  470.         dc.l        0    ;struct  Node *lh_TailPred;
  471.         dc.b        0    ;UBYTE   lh_Type;
  472.         dc.b        0    ;UBYTE   l_pad;
  473. ;        }
  474. ;}
  475. PortName    dc.b        'TempoTopaz.Port',0
  476. NFuncEnd
  477. MaxL        =90                ;Longest string MyText can write
  478. FuncMem        =NFuncEnd-NFunc
  479. BufMem        =8*MaxL
  480.  
  481. FontTxt        dc.b        'FONT',0
  482. NameOfFunc    dc.b        $9B,'1;33mTempoTopaz ',$9B,'0;31mV1.0 by ',$9B,'3;33mPreben Nielsen',$9B,'0;31m in 1990',LF,0
  483. InstalledTxt    dc.b        ' TempoTopaz has now been installed with '
  484. FontName
  485. RemovedTxt    dc.b        ' TempoTopaz has now been removed',LF,0
  486. AlteredTxt    dc.b        " ERROR: The 'Text' Vector has been changed. Can't remove",LF,0
  487. Mismatch    dc.b        " ERROR: Baseline mismatch",LF,0
  488. CantUseProp    dc.b        " ERROR: Can't use Proportional font",LF,0
  489. Not8x8Txt    dc.b        " ERROR: Not a 8x8 font",LF,0
  490. NoFontTxt    dc.b        " ERROR: Can't open font",LF,0
  491. NoMemTxt    dc.b        " ERROR: Can't get memory",LF,0
  492. NoLibTxt    dc.b        " ERROR: Can't open "
  493. DFName        dc.b        'diskfont.library',0,0
  494. DosName        dc.b        'dos.library',0
  495. GfxName        dc.b        'graphics.library',0
  496. IconName    dc.b        'icon.library',0
  497. CONName        dc.b        'CON:40/40/500/45/This window goes away after 3 seconds',0
  498.         EVEN
  499. DiskObj        dc.l        0
  500. DosBase        dc.l        0
  501. GfxBase        dc.l        0
  502. DFBase        dc.l        0
  503. IconBase    dc.l        0
  504. WBenchMsg    dc.l        0
  505. Handle        dc.l        0
  506.  
  507.         EVEN
  508. FontAttr    dc.l        TopazName
  509.         dc.w        TOPAZ_EIGHTY
  510.         dc.b        FS_NORMAL,FPB_ROMFONT
  511. TopazName    dc.b        'topaz.font',0
  512.         END
  513.  
  514.