LIST 2 7.TXT: Difference between revisions

From Atari Wiki
Jump to navigation Jump to search
(Olivier.jan moved page LIST 2 7.TXT to LIST 2 7.TXT/fr: Renaming for language version)
Tag: New redirect
 
(Replacing content of with translated version)
Tag: Removed redirect
Line 1: Line 1:
  +
Here's the fully translated MediaWiki code:
#REDIRECT [[LIST 2 7.TXT/fr]]
 
  +
  +
{{Languages|LIST 2 7.TXT}}
  +
<pre>
  +
**********************************************************************
  +
* *
  +
* 68000 ASSEMBLER COURSE ON ATARI ST *
  +
* *
  +
* by The Fierce Rabbit (from 44E) *
  +
* *
  +
* Listing number 2 / Course number 7 *
  +
* *
  +
**********************************************************************
  +
  +
* Test resolution, because if we are in high and we try to *
  +
* switch to low, bam! RESET! *
  +
  +
MOVE.W #4,-(SP) Getrez() function number
  +
TRAP #14 Xbios call
  +
ADDQ.L #2,SP stack correction
  +
CMP.W #2,D0 high resolution?
  +
BEQ LOAD yes, so load everything now
  +
  +
* Since we are not in high resolution, we force into low resolution
  +
* first we note by setting a flag to 1
  +
  +
MOVE.W #1,RESOLUTION
  +
  +
MOVE.W #0,-(SP) low resolution
  +
MOVE.L #-1,-(SP) unchanged screen address
  +
MOVE.L #-1,-(SP) unchanged screen address
  +
MOVE.W #5,-(SP) Setscreen() function
  +
TRAP #14 X bios
  +
ADDA.L #12,SP correction
  +
  +
* Opening of the image file
  +
  +
LOAD MOVE.W #0,-(SP) opening in read mode
  +
MOVE.L #FILENAME_ADDRESS,-(SP) addr of the file name
  +
MOVE.W #61,-(SP) Fopen() function
  +
TRAP #1 from GEMDOS
  +
ADDQ.L #8,SP stack correction
  +
  +
  +
* D0 contains the Handle or a negative error number
  +
  +
TST.W D0 compare to 0
  +
BLT ERROR less than so error
  +
  +
* We save the file handle
  +
  +
MOVE.W D0,D3
  +
  +
  +
* Skip the first 34 bytes of the DEGAS file
  +
* (2 header bytes, 32 for colors)
  +
  +
MOVE.W #0,-(SP) shift from the start of
  +
file
  +
MOVE.W D3,-(SP) file handle
  +
MOVE.L #34,-(SP) number of bytes to skip
  +
MOVE.W #66,-(SP) Fseek() function
  +
TRAP #1 from GEMDOS
  +
ADDA.L #10,SP
  +
TST.W D0 test D0
  +
BLT ERROR
  +
  +
* Determine the screen address
  +
  +
MOVE.W #2,-(SP) Physbase() function
  +
TRAP #14 xbios
  +
ADDQ.L #2,SP stack correction
  +
MOVE.L D0,A5 save address
  +
  +
* Load the image directly onto the screen
  +
  +
MOVE.L A5,-(SP) destination address
  +
MOVE.L #32000,-(SP) number of bytes to read
  +
MOVE.W D3,-(SP) file handle
  +
MOVE.W #63,-(SP) Fread() function
  +
TRAP #1 from GEMDOS
  +
ADDA.L #12,SP
  +
TST.W D0
  +
BLT ERROR
  +
  +
* Load the palette into our palette buffer
  +
* First reposition the file pointer
  +
  +
MOVE.W #0,-(SP) shift from the start of
  +
file
  +
MOVE.W D3,-(SP) file handle
  +
MOVE.L #2,-(SP) number of bytes to skip
  +
MOVE.W #66,-(SP) Fseek() function
  +
TRAP #1 from GEMDOS
  +
ADDA.L #10,SP
  +
TST.W D0 test D0
  +
BLT ERROR
  +
  +
* Then loading
  +
  +
MOVE.L #PALETTE_BUFFER,-(SP) destination address
  +
MOVE.L #32,-(SP) number of bytes to read
  +
MOVE.W D3,-(SP) file handle
  +
MOVE.W #63,-(SP) Fread() function
  +
TRAP #1 from GEMDOS
  +
ADDA.L #12,SP
  +
TST.W D0
  +
BLT ERROR
  +
  +
* Now we set this palette with Xbios (6)
  +
  +
MOVE.L #PALETTE_BUFFER,-(SP) black palette address
  +
MOVE.W #6,-(SP) SetPalette() function
  +
TRAP #14 XBIOS
  +
ADDQ.L #6,SP
  +
  +
* We close the file
  +
  +
MOVE.W D3,-(SP) handle
  +
MOVE.W #62,-(SP) Fclose() function
  +
TRAP #1 from GEMDOS
  +
ADDQ.L #4,SP
  +
  +
BRA END and we get out
  +
  +
* In case of error we come here
  +
  +
ERROR MOVE.L #ERROR_MESSAGE,-(SP) informs
  +
MOVE.W #9,-(SP)
  +
TRAP #1
  +
ADDQ.L #6,SP
  +
  +
END MOVE.W #7,-(SP) wait for a key press
  +
TRAP #1
  +
ADDQ.L #2,SP
  +
  +
CMP.W #0,RESOLUTION
  +
BEQ NOT_MEDIUM
  +
  +
* Since we are in low, we force back into medium resolution
  +
  +
MOVE.W #1,-(SP) medium resolution
  +
MOVE.L #-1,-(SP) unchanged screen address
  +
MOVE.L #-1,-(SP) unchanged screen address
  +
MOVE.W #5,-(SP) Setscreen() function
  +
TRAP #14 XBIOS
  +
ADDA.L #12,SP correction
  +
  +
* Then we exit
  +
  +
NOT_MEDIUM
  +
MOVE.W #0,-(SP)
  +
TRAP #1
  +
*-------------------------------------------------------------*
  +
SECTION DATA
  +
ERROR_MESSAGE DC.B "Sorry, error with",13,10
  +
DC.B "the file "
  +
FILENAME_ADDRESS DC.B "A:\IMAGE.PI1",0
  +
  +
SECTION BSS
  +
PALETTE_BUFFER DS.W 16
  +
RESOLUTION DS.W 1
  +
  +
</pre>
  +
Back to [[ASM_Tutorial]]
  +
[[Category: 68000 ASSEMBLER on ATARI ST Part 1 ]]

Revision as of 00:44, 17 December 2023

Here's the fully translated MediaWiki code:

     **********************************************************************
    *                                                                    *
    *               68000 ASSEMBLER COURSE ON ATARI ST                   *
    *                                                                    *
    *                   by The Fierce Rabbit (from 44E)                  *
    *                                                                    *
    *                 Listing number 2 / Course number 7                 *
    *                                                                    *
    **********************************************************************

    *  Test resolution, because if we are in high and we try to *
    *  switch to low, bam! RESET!                                *

           MOVE.W    #4,-(SP)              Getrez() function number
           TRAP      #14                   Xbios call
           ADDQ.L    #2,SP                 stack correction
           CMP.W     #2,D0                 high resolution?
           BEQ       LOAD                  yes, so load everything now

    * Since we are not in high resolution, we force into low resolution
    * first we note by setting a flag to 1

           MOVE.W    #1,RESOLUTION

           MOVE.W    #0,-(SP)              low resolution
           MOVE.L    #-1,-(SP)             unchanged screen address
           MOVE.L    #-1,-(SP)             unchanged screen address
           MOVE.W    #5,-(SP)              Setscreen() function
           TRAP      #14                   X bios
           ADDA.L    #12,SP                correction

    * Opening of the image file

  LOAD     MOVE.W    #0,-(SP)              opening in read mode
           MOVE.L    #FILENAME_ADDRESS,-(SP)   addr of the file name
           MOVE.W    #61,-(SP)             Fopen() function
           TRAP      #1                    from GEMDOS
           ADDQ.L    #8,SP                 stack correction


    * D0 contains the Handle or a negative error number

           TST.W     D0                    compare to 0
           BLT       ERROR                 less than so error

    * We save the file handle

           MOVE.W    D0,D3


    * Skip the first 34 bytes of the DEGAS file
    * (2 header bytes, 32 for colors)

           MOVE.W    #0,-(SP)              shift from the start of
                                           file
           MOVE.W    D3,-(SP)              file handle
           MOVE.L    #34,-(SP)             number of bytes to skip
           MOVE.W    #66,-(SP)             Fseek() function
           TRAP      #1                    from GEMDOS
           ADDA.L    #10,SP
           TST.W     D0                    test D0
           BLT       ERROR

    * Determine the screen address

           MOVE.W    #2,-(SP)              Physbase() function
           TRAP      #14                   xbios
           ADDQ.L    #2,SP                 stack correction
           MOVE.L    D0,A5                 save address

    * Load the image directly onto the screen

           MOVE.L    A5,-(SP)              destination address
           MOVE.L    #32000,-(SP)          number of bytes to read
           MOVE.W    D3,-(SP)              file handle
           MOVE.W    #63,-(SP)             Fread() function
           TRAP      #1                    from GEMDOS
           ADDA.L    #12,SP
           TST.W     D0
           BLT       ERROR

    * Load the palette into our palette buffer
    * First reposition the file pointer

           MOVE.W    #0,-(SP)              shift from the start of
                                           file
           MOVE.W    D3,-(SP)              file handle
           MOVE.L    #2,-(SP)              number of bytes to skip
           MOVE.W    #66,-(SP)             Fseek() function
           TRAP      #1                    from GEMDOS
           ADDA.L    #10,SP
           TST.W     D0                    test D0
           BLT       ERROR

    * Then loading

           MOVE.L    #PALETTE_BUFFER,-(SP) destination address
           MOVE.L    #32,-(SP)             number of bytes to read
           MOVE.W    D3,-(SP)              file handle
           MOVE.W    #63,-(SP)             Fread() function
           TRAP      #1                    from GEMDOS
           ADDA.L    #12,SP
           TST.W     D0
           BLT       ERROR

    * Now we set this palette with Xbios (6)

           MOVE.L    #PALETTE_BUFFER,-(SP) black palette address
           MOVE.W    #6,-(SP)              SetPalette() function
           TRAP      #14                   XBIOS
           ADDQ.L    #6,SP

    * We close the file

           MOVE.W    D3,-(SP)              handle
           MOVE.W    #62,-(SP)             Fclose() function
           TRAP      #1                    from GEMDOS
           ADDQ.L    #4,SP

           BRA       END                   and we get out

    * In case of error we come here

  ERROR    MOVE.L    #ERROR_MESSAGE,-(SP)  informs
           MOVE.W    #9,-(SP)
           TRAP      #1
           ADDQ.L    #6,SP

  END      MOVE.W    #7,-(SP)              wait for a key press
           TRAP      #1
           ADDQ.L    #2,SP

           CMP.W     #0,RESOLUTION
           BEQ       NOT_MEDIUM

    * Since we are in low, we force back into medium resolution

           MOVE.W    #1,-(SP)              medium resolution
           MOVE.L    #-1,-(SP)             unchanged screen address
           MOVE.L    #-1,-(SP)             unchanged screen address
           MOVE.W    #5,-(SP)              Setscreen() function
           TRAP      #14                   XBIOS
           ADDA.L    #12,SP                correction

    * Then we exit

  NOT_MEDIUM
           MOVE.W    #0,-(SP)
           TRAP      #1
  *-------------------------------------------------------------*
      SECTION DATA
  ERROR_MESSAGE      DC.B                  "Sorry, error with",13,10
                     DC.B                  "the file "
  FILENAME_ADDRESS   DC.B                  "A:\IMAGE.PI1",0

      SECTION BSS
  PALETTE_BUFFER     DS.W                  16
  RESOLUTION         DS.W                  1

Back to ASM_Tutorial