ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
copper_nop.c
Go to the documentation of this file.
1/*****************************************************************************
2 * ugBASIC - an isomorphic BASIC language compiler for retrocomputers *
3 *****************************************************************************
4 * Copyright 2021-2026 Marco Spedaletti (asimov@mclink.it)
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *----------------------------------------------------------------------------
18 * Concesso in licenza secondo i termini della Licenza Apache, versione 2.0
19 * (la "Licenza"); è proibito usare questo file se non in conformità alla
20 * Licenza. Una copia della Licenza è disponibile all'indirizzo:
21 *
22 * http://www.apache.org/licenses/LICENSE-2.0
23 *
24 * Se non richiesto dalla legislazione vigente o concordato per iscritto,
25 * il software distribuito nei termini della Licenza è distribuito
26 * "COSÌ COM'È", SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, esplicite o
27 * implicite. Consultare la Licenza per il testo specifico che regola le
28 * autorizzazioni e le limitazioni previste dalla medesima.
29 ****************************************************************************/
30
31/****************************************************************************
32 * INCLUDE SECTION
33 ****************************************************************************/
34
35#include "../../ugbc.h"
36
37/****************************************************************************
38 * CODE SECTION
39 ****************************************************************************/
40
46 /* <usermanual>
47@keyword COPPER NOP
48
49@english
50
51The primary purpose of the ''COPPER NOP'' instruction is to wait some time
52doing nothing during copper list execution, and synchronized with the television's
53video display.
54
55A copper list is a sequence of special instructions that the processor executes
56independently of the main execution. These instructions are programmed to execute
57in sync with the video signal, typically when the television's video display
58reaches a specific horizontal and vertical position on the screen.
59
60@italian
61
62Lo scopo principale dell'istruzione "COPPER NOP" è di attendere un certo tempo
63senza fare nulla durante l'esecuzione della Copper List, sincronizzandosi con il display
64video del televisore.
65
66Una Copper List è una sequenza di istruzioni speciali che il processore esegue
67indipendentemente dall'esecuzione principale. Queste istruzioni sono programmate per essere eseguite
68in sincronia con il segnale video, in genere quando il display
69video del televisore raggiunge una specifica posizione orizzontale e verticale sullo schermo.
70
71@syntax COPPER NOP
72
73@example BEGIN COPPER
74@example COPPER WAIT LINE 10
75@example COPPER MOVE &H2c8, &H2c7 AS BYTE
76@example COPPER NOP
77@example COPPER MOVE &H2c8, &H2c7 AS BYTE
78@example END COPPER
79
80@alias NOP
81@seeAlso BEGIN COPPER...END COPPER
82
83</usermanual> */
84void copper_nop( Environment * _environment ) {
85
86 if ( !_environment->insideCopperList ) {
88 }
89
91 memset( nop, 0, sizeof( CopperInstruction ) );
92
93 nop->operation = COP_NOP;
94
95 if ( _environment->copperList->first ) {
96 CopperInstruction * actual = _environment->copperList->first;
97 while( actual->next ) {
98 actual = actual->next;
99 }
100 actual->next = nop;
101 } else {
102 _environment->copperList->first = nop;
103 }
104
105}
void copper_nop(Environment *_environment)
Emit code for BEGIN COPPER.
Definition copper_nop.c:84
#define nop(ticks, adrmode)
Definition sidreloc.c:845
struct _CopperInstruction * next
Definition ugbc.h:2246
struct _CopperInstruction * first
Definition ugbc.h:2254
CopperList * copperList
Definition ugbc.h:3282
int insideCopperList
Definition ugbc.h:3280
void * malloc(YYSIZE_T)
@ COP_NOP
Definition ugbc.h:2223
struct _Environment Environment
Structure of compilation environment.
#define CRITICAL_COPPER_LIST_NOT_OPENED()
Definition ugbc.h:3841
struct _CopperInstruction CopperInstruction